Java/Spring 13

SwaggerUI + Spring REST Docs 함께 사용하기(feat. Rest Assured)

이 글은 딥다이브한 내용을 쭉 풀어쓴 내용입니다. 시간이 없으신 분은 전체 소스코드를 참고해 주세요. 0. 시도하게된 이유 0.1 Swagger 경험 이전에 TODO List 라는 프로젝트에서 Swagger 를 사용해본 적이 있습니다. API 문서가 자동으로 생긴다는 점은 편했지만, 비즈니스 로직과 API 를 위한 코드가 섞여있다는 것이 마음에 들지 않았습니다. 0.2 Spring REST Docs 시도 그러던 중 우아한형제들 기술블로그를 인상깊게 보아 Spring REST Docs 를 시도해보게 되었습니다. Spring REST Docs 는 다음과 같은 장점이 있었습니다. API 문서가 테스트코드 통과 후 생성됨 비즈니스 로직에는 API 문서 관련 코드가 전혀 없음 커스텀이 자유로움 하지만, 다음과 같..

Java/Spring 2022.07.31

SpringBoot 설정 암호화

Github Action 을 이용한 배포 자동화를 진행해보려니, application.properties 의 민감정보를 어떻게 처리해야할지 고민이 되었습니다. 여러 방법을 찾아보다가, 찾은 선택지는 다음과 같습니다. 민감정보 환경변수(변수) 관리 Secrets 에서 설정파일 내용을 읽어와서 Github Action 에서 설정파일 생성 민감정보 암호화 결론부터 말씀드리면 저는 4번 방법을 선택했는데요. 각 방법에 장단점이 있어서, 간단하게 정리해봤습니다. 방법 장점 단점 1. 민감정보 환경변수 관리 - 설정파일을 Github 에 올릴 수 있음 - 개발, 빌드, 서버 세곳의 환경변수를 관리해야함 - 관리할 민감정보가 많아질수록 관리하기 힘듦 2. Secrets 에서 설정파일 내용을 읽어와서 Github Ac..

Java/Spring 2022.05.27

Entity 의 Equals 와 HashCode 를 오버라이드 해도 될까?

엔티티 검증 테스트 코드를 작성하다가, 두 객체가 같은지 비교하는 로직의 작성이 필요했습니다. @Test void TestSomething() { // ... 생략 assertThat(resultEntity.getId()).isEqualTo(expectedEntity.getId()); assertThat(resultEntity.getName()).isEqualTo(expectedEntity.getName()); assertThat(resultEntity.getPrice()).isEqualTo(expectedEntity.getPrice()); assertThat(resultEntity.getStockQuantity()).isEqualTo(expectedEntity.getStockQuantity()); }이..

Java/Spring 2022.04.27

스프링 부트 핵심 라이브러리

Springboot 핵심 라이브러리(2.3.1.RELEASE) spring-boot-starter-web spring-boot-starter-tomcat : 톰캣(WAS) spring-webmvc : 스프링 웹 MVC spring-boot-starter-thymeleaf : 템플릿 엔진 spring-boot-starter(공통) spring-boot spring-core spring-boot-stater-logging slf4j : 로깅 인터페이스 logback : 로깅 구현체 Springboot 테스트 라이브러리 spring-boot-starter-test junit : 테스트 프레임워크 (springboot2.2 부터 junit5가 기본적으로 탑재됨) mockito : 목 라이크러리 assertj :..

Java/Spring 2021.12.03

[Spring] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 후기(+삽질)

스프링부트와 AWS로 혼자 구현하는 웹 서비스를 통해 공부한 개인적인 후기를 남깁니다. 이 책을 선택한 이유 평소 팔로우하던 개발자 중 한분이시고, 무중단 배포까지 다룬다는 점에서 기대하고 고르게 되었습니다. 그리고 사실, 이론 공부 보다는 손으로 만지작 거릴 수 있는걸 더 좋아하는 성향입니다. 그래서 실전 예제가 많이 포함되어있는 책으로 먼저 맛을 보고, 이론을 공부하고자 이 책을 선택했습니다. 이 책으로 공부하며 초~중반 프로젝트 진행하는 내용을 보며 초반에는 IntelliJ 설치, 프로젝트 환경 구성 등등 간단히 따라할 수 있는 예제들로 시작하여 빠르게 따라할 수 있었습니다. 2장 ~ 5장 까지 테스트코드 작성, JPA 맛보기, 머스테치로 화면 만들기, 스프링 시큐리티와 OAuth2로 소셜로그인 구..

Java/Spring 2021.11.17

[Spring] SpringBoot에서 @RestController의 역할

최근 SpringBoot를 공부하던 중에 Controller에 @RestController만 붙였는데 어떻게 ResponseBody를 JSON으로 자동 변환해주는지 문득 궁금하여 찾아보게 되었다. 혹시 Jackson이? 예전에 Spring을 공부할 당시, Jackson 라이브러리를 사용해서 ResponseBody를 JSON 형태로 변환했던것이 기억 났다. 확인해 보니 역시 그랬다. springboot-starter-web이 참조하는 라이브러리 중에서 spring-boot-starter-json 이라는 라이브러리가 jackson을 사용하고 있었다. 참조하는 라이브러리 중 핵심이 되는 것들은 다음과 같다. jackson-databind : jackson-core 인터페이스 구현체로, jackson의 핵심 기..

Java/Spring 2021.10.05

[Springboot] 1. build.gradle 작성하기

Springboot에서는 Maven대신에 Gradle이라는 빌드&의존성관리 툴을 사용한다. 이전에 Maven을 사용하는 Spring에서는 pom.xml에서 주로 의존성 및 빌드 정보를 관리하였다면, Gradle을 사용하는 Springboot는 build.gradle이라는 파일에서 의존성 및 빌드 정보들을 관리한다. buildscript { ext { springBootVersion = '2.1.9.RELEASE' } repositories { mavenCentral() jcenter() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } /* 이 gradle파일에서 b..

Java/Spring 2019.12.22

[Spring] MyBatis 한글 깨짐 해결법

1. web.xml 설정 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter /* Colored by Color Scripter cs 프로젝트의 web.xml에 다음과 같은 필터를 적용해 준다. 이 Filter는 POST로 오는 요청에 대해 인코딩을 수행한다. 만약 GET으로 오는 요청도 한글 처리가 필요하다면, 서버의 Server.xml 설정도 필요하다. Server.xml 설정 1 2 3 cs 2. MyBatis 설정 - db url설정(mysql) 1 url : jd..

Java/Spring 2019.07.22

[Spring] Spring CORS설정

[추천글..] [Sencha] extjs+spring에서 jsonp 적용하기 위 글에서는 cors요청을 위해 jsonp를 적용하였지만, jsonp의 장점이자 결정적인 단점이 있다. 그것은 바로, GET 요청으로 javascript를 요청하고 받는다는 것이다. 이 말은 즉, GET요청만 가능하기 때문에 CRUD(Create Read Update Delete) 기능을 모두 구현하는것은 제한적이다. 일반적으로 Create, Update의 경우 데이터를 전송하기때문에 정보 보호를 위해 POST방식으로 요청을 한다. 그러면 POST방식으로 요청을 하는 방법을 알아야 하는데, 하지만 POST method로 Cross-Origin에 요청을하면, SOP(Same-Origin Polic)에 의해 요청이 제한된다. 하지만..

Java/Spring 2019.07.20

[Spring] Spring Mybatis 설정

MyBatis를 Spring에서 설정하는 방법을 알아보겠습니다. 사용되는 모듈은 다음과 같습니다. MyBatis 3 3.4.6 JDBC Wrapper로 JDBC로 보다 더 편하게 DB 작업을 수행할 수 있게 해주는 모듈 MyBatis-Spring 1.3.2 MyBatis를 기반으로 기능을 확장한 모듈로, MyBatis와 Spring을 연동해 주는 모듈 MyBatis의 SqlSession 은 기본적으로 Thread-Safe 하지 않습니다. 하지만 MyBatis-Spring 의 SqlSession 을 확장하여 SqlSessionTemplate 이라는 Thread-Safe 한 클래스를 제공하합니다. Spring-jdbc 5.1.5.RELEASE mysql connector java 8.0.13 (DB 버전에 ..

Java/Spring 2019.06.02