개발/Spring Boot

    [Spring Boot] dotenv(.env) 때문에 날려버린 2일

    문제 상황 AWS S3 연동을 위해 access key 와 secret key를 발급 받고 연동 시작 로컬 IDE (vscode) 에서는 S3에 정상적으로 작동 문제는 build 후 jar파일 실행시 권한이 없다고 뜸 삽질 과정 구글링이란 구글링은 다 해본듯 하다. 어떠한 것도 해결 되지 않았음. 그러다 문득 application.yml 에 있는 access key와 secret key등 .env 파일에서 받아오는 부분을 하드코딩 해봄 jar파일에서도 S3 연결 성공! 문제는 .env 에서 value값을 받아오는 과정에서 생겼다고 드디어 문제점 파악 문제점 value값에 더블쿼테이션을 쓴게 문제였다. AWS_ACCESS_KEY="envTest" 위처럼 설정했었는데 IDE에서는 정확하게 읽기 때문에 문제점..

    [Spring Boot] 어노테이션 정리

    @SpringBootApplication Spring Boot를 자동으로 실행시켜주며 @ComponentScan을 통해 Component를 Bean으로 등록시킨다. @EnableAutoConfiguration을 통해 미리 정의해둔 설정파일을 Bean으로 등록시킨다. @ComponentScan @Component, @Service, @Repository, @Controller, @Configuration 이 붙은 빈들을 찾아서 Context에 빈을 등록시켜준다. @Component 생성한 클래스를 Bean으로 등록시킬때 사용한다. @Bean 개발자가 컨트롤 불가능한 외부 라이브러리를 Bean으로 등록할때 사용한다. @Controller Controller로 사용되는 어노테이션이다. @Service 비즈니스..

    [Spring Boot] Setter vs Constructor vs Builder

    Spring boot로 코딩을 하다보면 객체의 값을 변경해줘야 할때가 있다. 방법은 크게 Setter, 생성자, Builder 3가지로 나뉜다. 1. Setter (자바빈즈 패턴) 자바 개발자들은 setter를 지양하라고 한다. 그럼 왜 setter를 지양하고 새로 객체를 생성해야 하는 생성자나 Builder를 사용해야 할까.. (1) 일관성 먼저 setter를 사용하면 언제든 값을 바꿀수 있다는 말이 된다. 다시말해 값을 바꿀수 없는 불변한 객체를 만들지 못한다는 말이 된다. (2) 가독성 만약 객체의 속성이 엄청 많아서 엄청나게 많은 setter가 있다고 가정한다. 그러면 객체만다 일일히 setName, setAge, ~~~ 을 계속 해주다보면 코드가 아주 더러워지고 나중엔 빠진 set 메소드를 찾고..

    [Spring Boot] Controller, Service, Repository

    Controller와 Service, Repository는 각각 역할이 있다. 흐름은 위와 같다. 컨트롤러는 client와 소통을 하며 데이터를 받거나 넘겨주고 서비스에서는 비즈니스 로직만을 작성한다. 여기서 Dao가 DB와 연결하며 CRUD를 수행하는데 이를 Repository라고 보면 된다. 1. Controller 가장 큰 역할은 Client와의 소통이다. Client로 부터 받은 데이터를 Service로 넘겨주어 Service가 비즈니스 로직을 수행하도록 한다. 그리고 Service로부터 데이터를 받아 Client로 넘겨준다. @RestController public class PostsApiController { private final PostsService postsService; @Post..

    [Spring Boot] DTO vs VO vs Entity

    1. DTO (Data Transfer Object) DTO란 데이터 전송 객체이다. 말그대로 데이터를 전송하기 위한 객체로 사용된다. class colorDTO{ private int red; private int blue; private int green; public colorEntity(int red, int blue, int green) { this.red = red; this.blue = blue; this.green = green; } public int getRed() { return red; } public int getBlue() { return blue; } public int getGreen() { return green; } public void setRed(int red) { t..

    [Spring Boot] DI 와 IoC는 무엇일까?

    스프링에서는 IoC와 DI가 전부라는 말을 들었다. 도데체 IoC와 DI가 얼마나 중요하길래 그럴까 라는 생각을 했다. 1. DI (Dependency Injection) DI는 "의존성" 주입이다. 예를 들어 A는 B에 의존한다라는 말은 A는 B의 상황에 따라 바뀔수도 있다라는 말로 될수도 있다. 의존하기 때문에 B가 바뀌면 A에게도 변화가 올 수 있다는 것이다. class A{ public B makeB(){ B b = new B(); return b; } } 코드로 본다면 위와 같은 예시가 있다. A클래스 안에서 b라는 객체를 만들었다. 그런데 갑자기 B라는 클래스에서 생성자를 수정하여 매개변수가 필요하다면 컴파일 오류가 난다. 이와 같이 B의 상황이 바뀌면서 A까지 영향을 미치는 상황이 의존한다 ..