본문 바로가기

Java

[Java] SpringBoot JPA Rest API 토이 프로젝트 진행 회고 ※ 목차 더보기 프로젝트를 시작하게된 계기 주요 기능 KPT 진행 후기 - SpringBoot + JPA를 활용한 Rest API Example 입니다. - Rest API 특성상 JWT를 활용하여 Front와 소통합니다. GitHub : https://github.com/DoHyeonJ/SpringBoot_RestApi_Example GitHub - DoHyeonJ/SpringBoot_RestApi_Example: SpringBoot, JPA, JWT토큰을 활용한 REST API 예제 SpringBoot, JPA, JWT토큰을 활용한 REST API 예제. Contribute to DoHyeonJ/SpringBoot_RestApi_Example development by creating an accou.. 더보기
[JAVA] JVM, JRE, JDK 자바의 동작원리 이 글은 백기선 님의 "더 자바, 코드를 조작하는 다양한 방법" 강의를 수강 후 참고하여 작성한 글입니다. JVM (Java Virtual Machine) : 자바 가상 머신 - 바이트 코드를 OS에 특화된 코드로 변환하여 실행해 준다. 바이트 코드란? - 자바 가상 머신이 실행하는 명령어의 형태 설명만으로는 이해하기 어려울 수 있기 때문에 직접 java 파일을 컴파일하여 어떤 식으로 동작하는지 살펴보았다. HelloWorld.java라는 간단한 파일을 생성하였다. 내용은 다음과 같다 public class HelloJava { public static void main(String[] args) { System.out.println("Hello World"); } } javac 명령어를 통해 해당 파일.. 더보기
[TestCode] Mock 객체 만들기 Mockito (JUnit5) - 사용이유 : 테스트 코드에서 객체 생성시 Mokito를 활용하여 임의로 생성해주어 번거로움을 줄일 수 있다. Mockito.mock() 메소드를 활용하여 만드는 법 @Test void createLunchService() { // mock() 메소드로 만드는 방법 LunchRepository lunchRepository = mock(LunchRepository.class); LunchService lunchService = new LunchService(lunchRepository); assertNotNull(lunchService); } - Mockito가 없다면 위 객체를 만들어주는데 필요한 구현체를 모두 구현해 줘야하기때문에 장황한 코드가 발생하지만 Mockito를 활용하여 위처럼 짧고 간결하게.. 더보기
[TestCode] junit-platform.properties 설정파일 (JUnit5) - Junit 설정 파일로, 클래스 패스 루트 (src/test/resources/)에 넣어두면 적용된다. - 파일 생성시 클래스 패스로 인식하지 않을 수 있다. 그런 경우 아래와 같이 설정해주면 된다. - File -> Project Structure -> Modules -> 해당 디렉터리를 Test Resorces로 설정 # 테스트 인스턴스 라이프사이클 설정 junit.jupiter.testinstance.lifecycle.default = per_class - 위처럼 해당 파일에 per_class로 설정해주게되면 전체 테스트 코드는 per_class로 실행되는 걸 확인할 수 있다. - 클래스에서 @Testinstance 어노테이션을 제거해도 위처럼 하나의 인스턴스로 동작하는걸 확인할 수 있다. @T.. 더보기
[TestCode] @TestMethodOrder 테스트 순서 (JUnit5) - 테스트 코드는 내부적으로 정해져있는 순서에 맞춰 실행되기때문에 여러번 실행을 해도 동일한 순서로 동작한다. (junit 내부 로직 변화에 따라 변할 수 있다) @TestMethodOrder : 테스트 메소드를 원하는 순서에 따라 실행하도록 해준다. @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class LunchTest { ``` @Order(1) @custom @DisplayName("테스트 순서 1") void order1_ex() { System.out.println("첫번째 테스트"); } @Order(3) @custom @DisplayName("테스트 순서 3") void order3_ex() { System.out.println("세번째 .. 더보기
[TestCode] @RepeatedTest, @ParameterizedTest 테스트 반복하기 (JUnit5) @RepeatedTest : 반복 횟수와 반복 테스트 이름을 설정할 수 있다. @RepeatedTest(10) // 10번의 테스트 반복 void repeatTest(RepetitionInfo repetitionInfo) { // 매개변수 통하여 현재 테스트 정보를 얻어옴 System.out.println("현재 " + repetitionInfo.getTotalRepetitions() + " 개의 테스트중 " + // 총 테스트 수 repetitionInfo.getCurrentRepetition() + " 번 실행중"); // 현재 진행중인 테스트 번호 } - 테스트 반복 횟수를 설정하고 매개변수를 통하여 테스트의 정보를 받아올 수 있다. - @RepeatedTest 어노테이션엔 2개의 매개변수를 넣어줄.. 더보기
[TestCode] @interface 커스텀 태그 (JUnit5) Junit5 애노테이션을 조합하여 커스텀 태그를 만들 수 있다. @Target(ElementType.METHOD) // 메서드에 사용이 가능하다. @Retention(RetentionPolicy.RUNTIME) // 애노테이션 정보를 런타임 까지 유지되도록 @Tag("local") // 태그가 local 환경이다. @Test public @interface custom { } - 커스텀태그를 위와 같이 생성하였다. - 위처럼 태그생성 후 테스트 코드 메서드에 이 애노테이션을 사용할 수 있다. @custom // @Test , Tag("local") 어노테이션 생략가능 @DisplayName("커스텀 태그") void custom_tag_ex() { Lunch lunch = new Lunch(); asse.. 더보기
[TestCode] @Tag 태깅과 필터링 (JUnit5) @Tag : 테스트 메소드에 여러 태그를 추가할 수 있다. @Test @DisplayName("태깅 그룹 local") @Tag("local") void tag_local_ex() { Lunch lunch = new Lunch(); assertTrue(lunch.getLunch("test").equals("Complete")); } @Test @DisplayName("태깅 그룹 dev") @Tag("dev") void tag_dev_ex() { Lunch lunch = new Lunch(); assertTrue(lunch.getLunch("test").equals("Complete")); } - 위처럼 코드 구성시 local, dev라는 2개의 태그로 나뉘게 된다. - 그대로 실행시에는 두 태그에 해당하.. 더보기