
@SpringBootApplication spring initializr로 프로젝트를 생성하고 스프링부트 프로젝트를 하다보면 메인 메서드위에 @SpringBootApplication이라는 어노테이션을 볼수 있다. @SpringBootApplication은 스프링부트를 설정하는 클래스인 것을 의미하고, 스프링은 이 어노테이션이 달린 클래스가 위치하는 패키지를 베이스 패지키로 간주한다. 스프링의 중요한 기능 중 하나는 의존성 주입 컨테이너이다. 스프링은 베이스 패키지를 기준으로 하위 패키지에서 자바빈을 찾아 스프링 의존성 주입 컨테이너 오브젝트 ApplicationContext에 등록하고 사용한다. @Component @Component는 스프링에게 자바빈으로 등록할 클래스를 알려준다. @ComponentS..

@Qualifier을 사용하여 조건을 추가했을 때 문자열의 오타를 잡아주지 못하기 때문에 의도했던 대로 적용이 되지 않을 수도 있다. 이를 위해서 따로 annotation을 만드는 방법이 있다. 1. Annotation 클래스를 생성한다 2. 클래스를 작성한다 @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Qualifier("mainDiscountPolicy") public @interface MainDiscountPolicy { } ..

"expected single matching bean but found *"빈을 주입할 때 여러개의 빈이 조회가 되면 에러가 발생한다. 해결 방법은 3가지가 있다. @Autowired 필드명 @Qualifier @Primary @Autowired 필드명 @Autowired에서 여러 빈이 매칭되면, 필드의 이름으로 매칭한다. 변경전 코드에서 DiscountPolicy가 여러개 매칭되어 문제가 발생하였다. DiscountPolicy의 필드명 discountPolicy를 매칭할 빈의 이름으로 변경을 해준다면 문제가 해결된다. @Qualifier @Qualifier은 구분할 수 있는 조건을 하나 더 추가하는 방법이다. 겹쳐지는 빈들 대상으로 @Qualifier을 사용하여 추가적인 이름을 붙여 준다. 필드 앞에..
의존 관계 주입은 4가지 방법이 있다 생성자 주입 setter 주입 필드 주입 일반 메서드 주입 생성자 주입 생성자 주입은 생성자를 통해 의존관계를 주입 받아 필드에 할당하는 방법이다 생성자 호출시점에 1번만 호출되며 불변, 필수 의존관계에 사용된다 만약 스프링 빈에 해당하는 클래스일 경우 생성자가 1개만 있다면 @Autowired을 생략해도 자동적으로 의존 관계가 주입된다 setter 주입 setter 메서드를 사용하여 필드의 값을 변경하는 방식으로 의존 관계를 주입하는 방법이다 선택, 변경 가능성이 있는 의존 관계에 사용한다 setter 메서드는 자바빈 규칙에 따라 다음과 같이 작성한다. 메서드 이름은 set으로 시작한다 set뒤에 첫 글자는 대문자로 시작한다 -> age를 설정하는 setter는 s..
SOLID 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙 SRP (단일 책임 원칙, Single Responsibility Principle) 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 한다 책임은 변경하려는 이유이다. 어떤 클래스나 모듈은 변경하려는 단 하나의 이유만을 가져야 한다. 문서를 작성하고 출력하는 모듈의 경우, 문서를 변경하는 경우와 문서를 흑백이나 출력하는 경우 이렇게 변경될 수 있다. 단일 책임 원칙에 의하면 이 경우는 두 책임이 있기 때문에 문서를 작성하는 모듈과 출력하는 모듈로 나눠야 한다. 클래스를 한 관심사에 집중하게 하면, 편집 과정에 변경이 일어나도 같은 클래스에 있는 출력 코드에 영향을 미칠 영향이 감소한다. OCP (개방-폐쇄 원칙, ..

@Configuration public class AppContext { @Bean public Greeter greeter() { Greeter g = new Greeter(); g.setFormat("Hello, %s!"); return g; } } @Configuration 클래스를 스프링 설정 클래스로 지정 @Bean 빈 객체: 스프링이 생성하고 관리하는 객체 스프링은 객체를 생성하고 초기화하는 기능을 제공 @Bean이 붙은 메서드가 생성하는 객체는 스프링이 관리하는 빈 객체로 등록됨 해당 어노테이션이 붙은 메서드는 객체를 생성하고 초기화해야 함 public class Main { public static void main(String[] args) { AnnotationConfigApplicat..

Maven pom.xml 메이븐 프로젝트의 핵심 메이븐 프로젝트에 대한 설정 정보를 관리하는 파일 프로젝트에 필요한 의존 모듈과 플러그인 등에 대한 설정 정보를 가짐 모든 메이븐 프로젝트는 루트 디렉토리에 pom.xml이 존재 artifact 메이븐이 관리하는 모듈의 단위 위의 artifact를 해석하면 spring-context라는 식별자를 가진 5.3.10 버전의 아티팩트에 대한 의존을 추가한 것이다. 메이븐은 코드를 컴파일하거나 실행할 때 dependency로 설정한 artifact 파일을 사용한다. 의존을 추가: 자바 어플리케이션 클래스패스에 모듈을 추가하는 것 artifact의 full name: 아티팩트이름-버전.jar 위의 이미지는 소스코드를 컴파일 하고 실행할 때 클래스패스에 spring-..

스프링부트를 실행하면서 에러가 발생하였다. 스프링부트 2.1 이후부터는 오버라이딩 기능을 설정을 해줘야 할 수 있다. Action을 보면 오버라이딩을 하기 위해서 무엇을 하라고 지시한다. Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true 위의 내용을 application.properties에 추가하면 된다. The dependencies of some of the beans in the application context form a cycle bean이 순환참조 되었다는 문제가 발생하였다. 등록한 내용을 주석처리 하였다. 잘 실행되었다.

Java Application은 JDBC API를 사용해서 SQL을 데이터베이스에 전달한다. SQL을 직접 사용할 때 단점 1. 작성해야 하는 코드가 많다 데이터베이스는 데이터 중심의 구조를 가지므로, 객체를 데이터베이스에 바로 저장하거나 조회할 수 없다. 따라서 개발자가 객체지향 애플리케이션과 데이터베이스 중간에서 SQL과 JDBC API를 사용해서 변환 작업을 직접 해주어야 한다. 2. SQL에 의존적이게 된다. 객체에 다른 정보를 저장해야 하면 쿼리도 변경을 해야한다. 변경된 사항이 있으면 DAO의 SQL을 수정해야 한다. 이렇게 되면 Entity와 의존관계가 강해진다. CRUD 코드와 SQL을 변경해야 하는 단점이 있다. 계층 분할이 어려움 엔티티의 신뢰성이 하락 SQL에 의존적 SQL 직접 사용..

스프링 프로젝트를 실행하면, 8080 포트가 이미 사용중이라, 실행할 수 없다는 내용이 출력될 때가 있다. 이러면 8080 포트를 사용하고 있는 프로세스를 종료해주면 된다. lsof -n -i -P | grep 8080 위의 명령어로 8080 포트를 사용하고 있는 프로세스를 조회한다. 그럼 프로세스의 PID가 4516인 것을 확인할 수 있다. kill -9 PID PID가 4516인 프로세스를 종료해주면 된다.
- Total
- Today
- Yesterday
- squash merge
- pm.test
- Kotlin
- solidity
- 확장 함수
- postman
- string
- graphql
- Squash and merge
- git
- 코딩테스트
- 코틀린
- pm.expect
- 1차 인터뷰
- 2차 인터뷰
- mysql
- go 특징
- github
- Python
- downTo
- python3
- hashcode
- postman collection
- java
- postman tests
- 네이버 2022 공채
- 주생성자
- Kotlin In Action
- DGS Framework
- Basic Type
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |