Spring 18

버저닝 ...

안드로이드와 협업을 할 때 버저닝은 필수적이다. 왜냐하면 죽어도 앱 업데이트를 안하는 사람들(대표적으로 나)가 있기 때문 올해 중순까지만 해도 카카오톡 업데이트를 안해서 보이스톡 기능을 못썼다. 지금 쿠팡앱 켜도 맨날 업데이트 하라고 하는데 이악물고 무시중... 핸드폰 저장공간이 부족한 탓이다. 하지만 죽어도 게임은 못지움. 아무리 권태기가 오더라도 언젠간 다시 돌아가기 때문 어쨌든 안드로이드 앱의 버전은 1.1.2 이런 형식인데 (Major).(Minor).(Patch) 이렇게 구성된다. 우리 이돈이면 팀은 대충 Api가 바뀌어서 버전 호환이 안되면 Major 버전이 올라가고, 기존의 Api는 바뀌지 않고 새로운 Api가 추가되거나 비즈니스 로직이 변경되는 정도에서 끝나면 Minor 버전이 올라가고, ..

[Spring 스프링] 스프링은 뭐지? 왜 스프링을 쓸까?

우테코 레벨2를 시작하는 처음에 궁금했던 내용인데, 스프링 사용법과 미션 구현에 쫓기다가 궁금증을 해결하지 못하고 레벨2가 끝나버렸다. 거기다가 레벨 인터뷰때 도기가 이 질문을 해줘서 나의 빈공간을 잘 찔러주었다. 이렇게 궁금증 해소를 미루던 와중에! 이번 방학때 인프런에서 김영한님의 강의를 듣다가 어느정도 가닥이 잡힌 것 같아서, 생각난김에 이번에 알게된 내용을 정리 해보려 한다. 스프링은 뭐지? 🧐 스프링? 스프링은 여러가지 기술들의 모음이다. 스프링에서 핵심이 되고, 필수적으로 사용되는 기술로는 스프링 프레임워크와 스프링 부트가 있고, 선택적으로 더 많은 기술들을 적용할 수 있다. 스프링 사이트에서 다른 기술들로는 뭐가 있는지 확인할 수 있다. 🧐 스프링 프레임워크? 스프링에서 핵심이 되는 것이 스..

[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 스프링] 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 어노테이션을 붙여보았지만 여전히 테스트 코드는 깨졌다. 공식문서를 확인해보니..

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

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

[Spring 스프링] Spring Core - IoC(Inversion of Control), DI(Dependency Injection)

IoC(Inversion of Control, 제어의 역전) IoC는 말그대로 제어가 역전되었다, 제어의 흐름을 바꾼다는 뜻이다. 제어가 역전이 안된 상태부터 생각해보자. 처음 프로그래밍을 하던 시절을 생각해보면, 보통 프로그램은 main 메서드가 실행되고, 다음에 사용할 객체를 결정, 생성하고, 객체에 있는 메소드를 호출한다. 그리고 이 오브젝트 또한 자신이 사용할 객체를 스스로 생성하고 사용한다. 자신에 관련된 작업은 자신이 제어한다. 제어가 역전이 되었다는 것은 지금까지의 능동적인 과정이 수동적으로 바뀌는 것을 말한다. 객체가 자신이 사용할 오브젝트를 스스로 결정하지도 않고, 생성하지도 않는다. 다른 누군가가 외부에서 객체를 만들어서 자신에게 넘기면 그것을 사용한다. 스프링에서는 애플리케이션 컨텍스..

1 2