스프링 17

버저닝 ... 2

⬇️버저닝 ... 1편⬇️ 버저닝 ... 안드로이드와 협업을 할 때 버저닝은 필수적이다. 왜냐하면 죽어도 앱 업데이트를 안하는 사람들(대표적으로 나)가 있기 때문 올해 중순까지만 해도 카카오톡 업데이트를 안해서 보이스톡 기능 finger-ineedyourhelp.tistory.com 포스팅 이후에 팀원들과 버저닝에 대해 토의하는 시간을 한번 더 가졌다. "호환성"과 "추후에 강제 업데이트하는 상황"에 대해 생각을 더 해보다가 이야기가 나왔던 것인데, (Major).(Minor).(Patch)에서 Major 버전을 언제 올릴지가 주된 토의 내용이었다. - 기존 특정 기능에 대한 API가 바뀌면 Major를 올린다. 예를들어 회원정보조회 API가 바뀌며 Major 버전을 1에서 2로 올릴때, 서버에서는 1과..

버저닝 ...

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

포스트맨으로 MultiPart 파일 보내는 방법!!(사진 첨부해서 요청보내기)

이것이 내가 속한 이돈이면 팀의 게시글 작성 요청 Dto의 모습이다. 이번에 자바 17을 쓰는 김에 야무지게 record 클래스를 써보았다. 이것은 컨트롤러다. Json을 받을때는 @RequestBody를 썼는데, 이번에는 multipart/form-data를 받아서 @ModelAttribute를 붙여야 했다. 아무튼! 우리 프로젝트는 게시글 작성 요청에 이미지 파일이 multipart 형태로 담겨져 와서, 이를 포스트맨으로 테스트 할 수 있는 방법을 찾아보았다. 위에처럼 Body 탭에 form-data를 선택하면, Key의 타입을 Text과 File 중에 선택할 수 있는데, File로 선택하면 Value로 여러개의 파일을 첨부할 수 있다!! 맨날 json만 보내보다가 이렇게 보내보니 조금 신기하다. 어..

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

1 2