분류 전체보기 80

[네트워크] OSI 7 layer

OSI (Open Systems Interconnection) 7 계층은 통신에서 사용되는 표준 구조이다. 이 구조는 통신 시스템을 계층적으로 분할하여 생각하고 설계할 수 있도록 돕는다. 각 계층은 특정 기능을 수행하며, 이러한 계층화된 구조를 통해 통신 문제를 나누어서 이해하고 해결할 수 있다. 상위 계층에서는 하위 계층에서 특정 기능이 제공된다고 가정하고, 그 특정 기능에 대한 문제를 푸는 것에서 해방된다. 이로써 상위 계층에서는 자신이 제공하는 기능에 대한 문제를 해결하는 데 집중할 수 있게 된다. 상위 계층은 하위 계층이 제공하는 기능을 이용해서 다른 상위 계층에게 서비스를 제공한다. OSI 7 계층 구조 물리 계층 : 물리적인 신호 교환과 관련된 사항 담당 링크 계층 : 하나의 링크로 연결된 노..

CS/Network 2023.05.28

[Spring 스프링] 외부 파일을 이용한 Configuration 그런데 이제 @PropertySource와 @Value를 곁들인

[Spring 스프링] Java기반 Configuration Java 기반으로 빈을 등록할 수 있다. // Java-based Configuration을 하기 위한 클래스로 지정 @Configuration public class AuthenticationPrincipalConfig { // AuthService 빈을 등록 @Bean public AuthService authService() { return new Aut finger-ineedyourhelp.tistory.com 지난번에 Java기반 Configuration을 하는 방법을 포스팅 했다. 하지만 여기에 추가로 properties 파일에 있는 값이 필요할 때가 있을 수도 있다. 예를 들면 다음 사진에서 security-jwt-token-sec..

[Spring 스프링] Java기반 Configuration

Java 기반으로 빈을 등록할 수 있다. // Java-based Configuration을 하기 위한 클래스로 지정 @Configuration public class AuthenticationPrincipalConfig { // AuthService 빈을 등록 @Bean public AuthService authService() { return new AuthService(); } // AuthenticationPrincipalArgumentResolver를 빈 등록하고 authService에 대한 의존성을 주입 @Bean public AuthenticationPrincipalArgumentResolver authenticationPrincipalArgumentResolver() { return new..

[Spring 스프링] xml기반 Configuration

xml 파일로 빈을 등록할 수 있다. 태그 빈 객체를 만들 때 사용 id 속성: 해당 빈 객체를 식별하기 위한 고유 식별자 class 속성: 해당 빈 객체의 클래스 경로 태그 해당 빈 객체의 프로퍼티를 설정하는 데 사용 name 속성: 해당 클래스 내에 선언된 맴버 변수 중, 의존성 주입을 할 변수 이름 ref 속성: 의존하는 빈의 id public class UserService { private UserRepository userRepository; public void setUserRepository(UserRepository userRepository) { this.userRepository = userRepository; } public String sayHello() { return "hell..

[Spring 스프링] HandlerMethodArgumentResolver 알아보기

ArgumentResolver는 요청으로 들어온 값을 원하는 객체로 만들어서 컨트롤러에 전달해 주고 싶을 때 사용한다. 다음은 ArgumentResolver를 구현할 때 사용되는 HandlerMethodArgumentResolver 인터페이스이다. public interface HandlerMethodArgumentResolver { boolean supportsParameter(MethodParameter parameter); @Nullable Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBind..

[Spring 스프링] HandlerInterceptor 알아보기

인터셉터는 전체 path, 또는 특정 path에 대하여 컨트롤러가 실행되기 전 후로, 요청과 응답을 가로채서 적절한 전/후 처리를 하도록 도와준다. 핸들러에 사용자 인증과 같은 중복 코드가 존재할 때, 이를 인터셉터로 옮기면 핸들러의 중복코드를 줄일 수 있다. 다음은 인터셉터를 구현할 때 사용하는 HandlerInterceptor 인터페이스이다. public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } default void postHandle(HttpSer..

[Spring 스프링] HandlerInterceptorAdapter 말고 HandlerInterceptor

'org.springframework.web.servlet.handler.HandlerInterceptorAdapter' is deprecated HandlerInterceptorAdapter를 상속해서 인터셉터를 구현하고 있었는데, 노란색 블러가 거슬렸다. 스프링 5.3 버전 이상부터는 권장되지 않는다고 한다. 대신 HandlerInterceptor 또는 AsyncHandlerInterceptor 인터페이스를 직접 사용하라고 적혀있다. 참고로 HandlerInterceptorAdapter는 AsyncHandlerInterceptor를 구현한 것이다. 그나저나 @Deprecated 어노테이션으로 인해 노란 블러로 경고가 뜬 건가보다. 신기방기 그리고 안에 뭐 따로 구현된 것도 없다. @Deprecated..

[Spring 스프링] @SpringBootTest로 테스트할 때 데이터베이스 롤백하기

이번 장바구니 미션에서 컨트롤러 테스트 코드를 짤 때 @SpringBootTest어노테이션을 붙여서 짜면서 데이터베이스 롤백과 관련한 문제를 마주했다. 상품목록에 상품을 수정, 삭제하는 테스트 코드가 각각 있었는데, 항상 자동으로 수정 -> 삭제 순서로 테스트가 돌아가다가, @Order 어노테이션을 이용해서 삭제 -> 수정 순서로 돌려보니 테스트가 깨지는 것을 확인했다. 아무래도 이미 삭제된 상품을 수정하려고 하니 오류가 터진 것이겠군~ 디비 롤백을 해줘야겠네! 생각하고, 예전에 어디선가 @Transactional 어노테이션을 테스트에 붙이면 테스트가 끝난 후 변경된 내용들을 다시 롤백해준다고 들었기에 @Transactional 어노테이션을 붙여보았지만 여전히 테스트 코드는 깨졌다. 공식문서를 확인해보니..

[Spring 스프링] Mock을 이용한 테스트

테스트 더블이란 테스트 코드를 작성할 때, 실제 객체를 대신하여 사용하는 대체 객체를 의미한다. 이번에 페어 로건 덕분에 테스트 더블의 한 종류인 Mock을 처음 접했는데, 이걸 사용해 테스트를 했던 방법을 한번 기록해보았다. (Mock이 뭔지 설명하고 싶지만 아직 Stub와 Mock의 차이를 잘 이해하지 못하였으므로 일단 생략한다.) Mock을 사용하기 위해 Mockito라는 프레임워크를 이용하였다. Mockito는 자바에서 테스트 더블을 쉽게 사용할 수 있도록 도와주는 프레임워크이다. Mockito framework site Intro Why How More Who Links Training Why drink it? Mockito is a mocking framework that tastes real..

[우아한테크코스] 레벨2 - 웹 자동차 경주 미션 회고

레벨1의 첫 주에서는 콘솔에서 동작하는 자동차 경주 미션을 구현했었다. 이번 미션은 레벨1에서 구현했던 자동차 경주 미션 코드를 가져와서 웹 기반에서도 동작하도록 기능을 추가 및 수정하도록 하는 미션이었다. 그래서 결과적으로는 콘솔과 웹 모두에서 자동차 경주 게임을 할 수 있도록 만들어야 했으며, 콘솔 어플리케이션과 웹 어플리케이션에서 겹치는 중복 코드는 최대한 없애야 했다. 👇레벨1 자동차 경주 미션때 작성했던 코드👇 GitHub - hectick/java-racingcar: 자동차 경주 게임 미션 저장소 자동차 경주 게임 미션 저장소. Contribute to hectick/java-racingcar development by creating an account on GitHub. github.com..

1 2 3 4 5 ··· 8