일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스프링부트
- 스프링
- 세션기반 인증
- ORM
- @temproal
- java I/O
- IPC
- spring
- 동기
- 스프링부트 계층구조
- formmatted
- 퍼시스턴스 계층
- JPA
- 어노테이션
- http
- ./gradlew docker
- 로그인/로그아웃
- 토큰기반 인증
- 로그인 인증 흐름
- MSA
- ./gr
- 작업명중복
- 비동기
- 스프링부트 구조
- 프레젠테이션 계층
- 비즈니스 계층
- RESTfull API
- JWT
- Java
- 스프링 부트 테스트
- Today
- Total
목록전체 글 (74)
[DEV] J-Jay
AssertJ AssertJ는 JUnit과 함께 사용해 검증문의 가독성을 높여주는 라이브러리이다. 이를테면 앞서 작성한 테스트 코드의 Assertion은 기대값과 실제 비교값이 명시하지 않으므로 비교 대상이 헷갈린다. https://dev-junick.tistory.com/46 스프링 부트 테스트 코드 (1) - JUnit 테스트 코드 테스트 코드는 작성한 코드가 의도대로 잘 동작하고 예상치 못한 문제가 없는지 확인할 목적으로 작성하는 코드이다. 테스트 코드는 test 디렉터리에서 작업한다. 테스트 코드에도 dev-junick.tistory.com 기댓값과 비교값이 잘 구분되지 않는 예시 Assertions.assertEquals(a + b, sum); 큰문제가 아니라고 생각할 수 있지만 대규모 프로젝트..
테스트 코드 테스트 코드는 작성한 코드가 의도대로 잘 동작하고 예상치 못한 문제가 없는지 확인할 목적으로 작성하는 코드이다. 테스트 코드는 test 디렉터리에서 작업한다. 테스트 코드에도 다양한 패턴이 있다. 그중 많이들 사용하는 패턴은 given - when - then 패턴으로 테스트 코드를 세 단계로 구분해 작성하는 방식을 추천한다. given: 테스트 실행을 준비하는 단계 when: 테스트를 진행하는 단계 then: 테스트 결과를 검증하는 단계 스프링 부트 스타터 테스트 목록 JUnit : 자바 프로그래밍 언어용 단위 테스트 프레임워크 Spring Test & Spring Boot Test : 스프링 부트 애플리케이션을 위한 통합 테스트 지원 AssertJ : 검증문인 어설션을 작성하는 데 사용되..
스프링 부트 계층 파악하기 코드를 이용해서 스프링 부트에서는 계층을 어떻게 나누는지 확인해 보자. build.gradle 의존성 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' //JPA runtimeOnly 'com.h2database:h2' //In Memory Database compileOnly 'org.projectlombok:lombok' //Lombok annotationProcessor 'org.projectlombok:lombok' testImplementatio..
스프링부트 구조 스프링 부트는 각 계층이 양 옆의 계층과 통신하는 구조를 따른다. 각 계층은 서로 소통할 수는 있지만 다른 계층에 직접 간섭하거나 영향을 미치지 않는다. 예시를 들어보자. 어떤 거리에 카페와 빵집이 있다고 생각하면, 카페는 커피를, 빵집은 빵을 팔텐데 필요한 경우 서로 협업 관계를 맺어 어떤 손님이 커피를 사면 빵을 할인할 수도 있다. 이것이 계층간의 소통이다. 하지만 빵집 알바생이 빵을 팔다 말고 카페에 가서 커피를 팔 수는 없다.(계층은 서로 영향을 끼치지 못함) 각 계층은 자신의 책임에 맞는 역할(커피 판매, 빵 판매)을 수행하며, 필요에 따라 소통(커피 사면 빵 할인, 빵 사면 커피 할인 등)한다. 스프링 부트에는 프레젠테이션, 비즈니스, 퍼시스턴스 계층이 있다 이 계층들이 서로 ..
TestController @RestController public class TestController { @GetMapping("/test") // /test GET 요청이 오면 test() 메서드 실행 public String test() { return "Hello, world"; } } @RestController는 라우터 역할을 하는 어노테이션이다. (라우터 : HTTP 요청과 메서드를 연결하는 장치) 해당 어노테이션이 있어야 클러이언트의 요청에 맞는 메서드를 실행할 수 있다. 지금의 경우 TestController를 라우터로 지정해 /test GET 요청이 왔을 때 test() 메서드를 실행한다. 여기서 의문이 하나 생긴다 @RestController와 @Component는 어노테이션 용어가..
@SpringBootApplication @SpringBootApplication public class SpringBootDeveloperApplication { public static void main(String[] args) { SpringApplication.run(SpringBootDeveloperApplication.class,args); } } 이 클래스는 자바의 main() 메소드와 같은 역할을 한다. 즉 여기서 스프링 부트가 시작된다. @SpringBootApplication 어노테이션을 추가하면 스프링 부트 사용에 필요한 기본 설정을 해준다. SpringApplication.run() 메서드는 애플리케이션을 실행한다. 첫 번째 인수는 스프링 부트 애플리케이션의 메인 클래스로 사용할 ..
텍스트 블록 Java 17 이전 버전에서는 여러 줄의 텍스트를 작성하려면 \n을 추가해야 했지만 이제는 """로 감싼 텍스트를 사용해 여러 줄의 텍스트를 표현할 수 있다. String query11 = "SELECT * FROM \"items\"\n"+ "WHERE \"status\" = \"NORMAL\";"; String query17 = """ SELECT * FROM "items" WHERE "status" = "NORMAL"; """; formatted()메서드 값을 파싱하기 위한 formatted() 메소드를 제공한다. String content = """ { "id" : %d, "name" : %s, } """.formatted(1, "J-Jay"); 레코드 레코드는 데이터 전달을 목적으로 ..
스프링 부트 스타터 스피링 부트 스사터는 의존성이 모여 있는 그룹이다. 스타터를 사용하면 필요한 기능을 간편하게 설정할 수 있다. 스타터는 spring-boot-starter-{작업유형}이라는 명명규칙이 있다. (ex JDBC 스타터 : spring-boot-starter-jdbc) Starter 내용 spring-boot-starter-web Spring MVC를 사용해서 RESTful 웹 서비스를 개발할 때 필요한 의존성 모음 spring-boot-starter-test 스프링 애플리케이션을 테스트하기 위해 필요한 의존성 모음 spring-boot-starter-validation 유효성 검사를 위해 필요한 의존성 모음 spring-boot-starter-actuator 모니터링을 위해 애플리케이션에..
AOP(Aspect Oriented Programming) 관점 지향 프로그래밍 프로그래밍에 대한 관심을 핵심관점, 부가 관점으로 나누어서 관심 기준으로 모듈화 하는 것을 의미한다. 이해가 조금 어려우니 예시를 들겠다. 예를 들어 계좌 이체, 고객 관리하는 프로그램이 있을 때 각 프로그램에는 로깅 로직, 즉, 지금까지 벌어진 일을 기록하기 위한 로직과 여러 데이터를 관리하기 위한 데이터베이스 연결 로직이 포함 된다. 이때 핵심 관점은 계좌 이체, 고객 관리 로직이고, 부가 관점은 로깅, 데이터베이스 연결 로직이다. 실제 프로그램의 기능으로 로직을 정리하면 다음 그림과 같다. 그림을 보면 로깅과 데이터베이스 연결은 모두 계좌 이체, 고객관리에 필요하다. 여기에 AOP관점을 적용하면 부가 관점에 해당하는 로..
IoC(Inversion of Control) 제어의 역전 public Class Main { Sample sample = new Sample(); //클래스 Main에서 new 키워드로 클래스 Sample 생성 } 자바코드 작성시 객체를 생성할 때는 객체가 필요한 곳에서 직접 생성을 했다. 위의 예제를 보면 클래스 Sample 객체를 사용하기 위해 클래스 Main에서 객체를 직접 생성한다. 위 예제에 제어의 역전을 적용하면 다음과 같은 코드가 된다. public class Main { private Sample sample; // 코드에서 객체를 생성하지 않음, 어디선가 받아온 객체를 sample에 할당 } 제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와..