일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 코테
- 알고리즘
- python
- C++
- Nodejs
- 시스템호출
- 카카오 코테
- 구조체배열
- AWS
- 카카오
- Spring
- 가상면접사례로배우는대규모시스템설계기초
- @Autowired
- 카카오 알고리즘
- nestjs auth
- 스프링
- @Component
- nestjs typeorm
- 해시
- 파이썬
- 코딩테스트
- TypeORM
- 컴포넌트스캔
- nestJS
- thymeleaf
- OpenCV
- spring boot
- git
- C언어
- 프로그래머스
- Today
- Total
목록# Tech Studies (126)
공부 기록장 💻

인프런 - 스프링 핵심 원리 기본편 정리 전략 패턴이란? 할인 서비스를 제공하는 시스템에서, 클라이언트가 직접 할인의 종류(고정 할인 정책, 비율 할인 정책)를 선택할 수 있는 상황을 가정하면, 디자인 패턴 중 하나인 전략 패턴(strategy pattern)에 기반하여, 동일한 타입 내의 모든 스프링 빈을 조회하는 방식으로 이를 구현할 수 있다. 전략 패턴의 단어 정의를 간단히 살펴보면 다음과 같다. 전략 패턴(strategy pattern) 또는 정책 패턴(policy pattern)은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. 전략 패턴은 특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. 전..

Shortcut / Action Ctrl+B Go To Declaration Navigate to the initial declaration of the instantiated class, called method, or field. 선언된 특정 인터페이스와 클래스가 다른 곳에서 어떻게 쓰이고 있는지 확인하고자 할 때, Ctrl + B 단축키를 클릭하면 다음과 같이 어디서 import 되었는지, 어디서 필드로 사용되고 있는지 목록을 통해 확인할 수 있다.

인프런 - 스프링 핵심 원리 기본편 정리 조회되는 스프링 빈이 2개 이상일 때, 문제가 발생한다. (NoUniqueBeanDefinitionException @Autowired 는 기본적으로 타입(Type)으로 조회한다. 타입으로 조회하기 때문에, DiscountPolicy 타입에 대하여 @Autowired private DiscoutPolicy discountPolicy 는 ac.getBean(DiscountPolicy.class) 와 유사하게 동작한다고 볼 수 있다. 이전에 스프링 빈 조회 시 선택된 빈이 2개 이상일 때 문제가 발생함을 배웠다. 아래 예시로, DiscountPolicy를 구현하는 RatedDiscountPolicy, FixedDiscountPolicy에 모두 @Component를 붙..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.

인프런 - 스프링 핵심 원리 기본편 정리 생성자와 Getter, Setter 등 작성해야 하는 코드를 간결하게 줄여주는 Lombok 라이브러리에 대해 알아보자. 롬복이란? Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more. 롬복은 Java 라이브러리로 반복되는 getter,..

인프런 - 스프링 핵심 원리 기본편 정리 @Autowired 를 이용하여 스프링 빈의 의존 관계를 자동으로 주입하는 방법들에 대해 배웠다. 생성자를 통해 의존 관계를 주입하는 경우, 스프링 빈으로 필수적으로 등록되어야 한다는 전제가 있었지만, setter와 같은 수정자 또는 메서드를 사용하여 DI 수행 시, 주입할 스프링 빈이 없어도 동작이 가능하다. 주입할 스프링 빈이 없어도 동작할 수 있도록 옵션을 처리하는 방법들에 대해 학습해보자. 자동 주입 대상을 옵션으로 처리하는 방법 3가지 스프링 빈으로 등록되어 있지 않은 의존 관계를 옵션으로 처리하는 방법에는 다음과 같이 3가지가 있다. @Autowired(required=false): 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출되지 않음 org...

인프런 - 스프링 핵심 원리 기본편 정리 스프링의 컴포넌트 스캔 기능을 이용하여, 자동으로 스프링 빈을 컨테이너에 등록하고, 생성자에 적용된 @Autowired를 통해 해당 빈의 의존 관계를 자동으로 주입(DI) 한다는 것에 대해 학습하였다. 이번에는 @Autowired를 활용해 의존 관계를 주입하는 방법 4가지와 각각의 특징에 대해 배워보자. 그리고, 왜 생성자를 통한 의존 관계 주입을 사용해야 하는지 이유를 알아보자. 의존 관계 주입 방법 4가지스프링 컨테이너가 관리하는 스프링 빈에 대하여, 의존 관계를 주입하는 방법에는 다음과 같이 크게 4가지의 방법이 있다.생성자 주입수정자 주입 (setter 주입)필드 주입일반 메서드 주입 단, 의존 관계 자동 주입은 스프링 컨테이너가 관리하는 스프링 빈이어야 ..
인프런 - 스프링 핵심 원리 기본편 정리 스프링 컨테이너에 스프링 빈을 자동으로 등록하고 의존 관계를 주입해주는 컴포넌트 스캔에 대해 학습을 하였고, 이번에는 컴포넌트 스캔에서 같은 빈 이름이 등록되는 경우 발생하는 충돌에 대해 알아보자. AOP에 대해 학습하며 발생한 오류가 스프링 빈 중복 등록인 줄 알았던 며칠 전.. 스프링 입문 강의를 수강하며 AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)에 대해 학습하던 중, 스프링 컨테이너와 컴포넌트 스캔에 대한 충분한 이해가 바탕이 되지 않은 상태로 Configuration 설정 정보를 구성하여 오류가 발생한 경험이 있는데, 해당 오류 발생 원인이 스프링 빈 중복 등록으로 인한 충돌이라고 생각했던 경험이 있었다. (아래 글)..

인프런 - 스프링 핵심 원리 기본편 정리 지난번 AutoAppConfig의 @ComponentScan을 이용하여 스프링 컨테이너가 자동적으로 @Component 애노테이션이 추가되어 있는 컴포넌트들을 스프링 빈으로 등록하고, @Autowired를 통해 의존 관계를 자동으로 주입하는 컴포넌트 스캔 기능을 사용하였다. 이번에는 컴포넌트 스캔의 기본 탐색 위치와, 직접 지정을 통한 스캔 대상에 대해 학습해보자. 컴포넌트 스캔의 탐색 위치 모든 자바 클래스를 전부 다 컴포넌트 스캔하면 시간이 오래 걸리기 때문에, 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있다. 기본 스캔 대상 아래와 같이 지정하지 않는 경우는, 디폴트 값으로 @ComponentScan이 붙은 설정 정보 클래스 패키지가 시작 위치가 ..

인프런 - 스프링 핵심 원리 기본편 정리 지금까지 스프링 컨테이너를 생성하고, 구성 정보 AppConfig를 통해 객체들을 스프링 빈으로 등록하는 방법에 대해 배웠다. 그리고 스프링 컨테이너가 스프링 빈을 싱글톤으로 관리한다는 것 또한 이해하였다. 이번에는 스프링 빈을 직접 등록하지 않고, 스프링 컨테이너가 자동으로 스프링 빈을 등록하고, 의존 관계를 자동적으로 주입하도록 하는 컴포넌트 스캔에 대해 학습해보자. 직접 스프링 빈을 등록하는 방법 2가지 - @Bean과 xml 방식 기존에 스프링 빈을 등록하는 방법으로 다음의 두 가지를 학습하였다. 1. AppConfig에서 객체를 생성하는 메서드 위에 @Bean 어노테이션을 추가하는 방식 2. XML 파일에서 작성하는 방식 두 방법 모두 코드를 통해 각 객..

인프런 - 스프링 핵심 원리 기본편 정리 싱글톤 패턴에 기반하여, 하나의 인스턴스만 생성하여 공유하는 스프링의 싱글톤 컨테이너에 대해 이해해보자. 싱글톤이 왜 등장했는가? 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생했으며, 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 스프링과 같은 웹 애플리케이션은 보통 여러 클라이언트가 동시에 요청을 하는데, 각 고객이 요청을 할 때마다 새로운 객체를 생성하는 것은 효율적이지 않다. 테스트 지난번 스프링이 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때마다 새로운 객체를 생성한다. 아래의 테스트 코드를 통해 memberService를 호출할 때마다 AppConfig의 memberServiceImpl 구현체 매번 생성하고 있음을 확인할 ..

이전에 AWS RDS Management Console에서 MySQL 인스턴스를 생성해 보았고, 이제 MySQL Workbench 와 연결하여 GUI 환경에서 데이터베이스 내 테이블을 생성하고 쿼리문을 실행해보도록 하는 작업을 수행해보자. delimo 라는 DB 식별자의 RDS 인스턴스의 대시보드는 다음과 같다. MySQL Workbench Connection 이제 MySQL Workbench에서 New Connection 을 생성하자. Connection name에는 DB test 를 입력해주었고, Hostname 입력 창에 RDS 인스턴스의 엔드포인트를 복사하여 붙여넣도록 하자. Username 에는 RDS 인스턴스 생성 시 만들었던 마스터 사용자의 이름을 입력해주면 된다. 인스턴스 생성 시 만들었던..

문제 상황 AWS RDS에서 MySQL 인스턴스를 생성 완료했지만, 명령 프롬포트에서 해당 서버에 접속하려고 하니 아래와 같은 에러가 발생하였다. ERROR 2003 (HY000): Can't connect to MySQL server on 'endpointxxx.ap-northeast-2.rds.amazonaws.com:3306' (10060) 원인 파악 검색해보니 이 글 에서 정확한 원인과 해결 방법을 설명하고 있어, 큰 어려움 없이 해결할 수 있었다. Causes This error states that the inbound/outbound traffic from the AWS instance is not reachable to the current host where the MySQL client..

AWS에서 제공하는 RDS 서비스를 이용해, MySQL 인스턴스를 생성해보자. 데이터베이스 생성 표준 생성 방식으로 데이터베이스를 생성하자. 엔진 옵션 MySQL 엔진을 사용할 것이기 때문에, MySQL을 선택하자. 템플릿 프리티어 제품을 사용하도록 하자. 인스턴스 구성 버스터블 클래스가 자동ㅇ으로 선택되며, db.t3.micro 옵션(자동)을 지정하자. 설정 DB 인스턴스 식별자에 DB 이름을 적어주고, 마스터 사용자의 이름은 간단하게 admin으로 지정했다. 마스터 암호도 제약 조건에 맞게끔 입력해주었다. 추후 웹 애플리케이션 설정 정보 config에 입력해 할 정보들이므로, 위 3가지 정보는 따로 보관해두자. 스토리지 기본 값인 범용 SSD(gp2) 스토리지 유형과 할당된 스토리지 200GB를 지정..

iter iter 단축키를 누르면 Iterate Iterable or array 기능을 수행할 수 있다. 위에서 선언된 배열 iteratable 을 참조하여 for-each 구문을 자동적으로 만들어준다. sout, soutv sout 은 System.out.println() 을 자동 완성하여 만들어주는 기능을 한다. 그중에서도, soutv 는 위에서 선언된 변수 variable 을 출력하는 기능을 한다. 아래와 같이 soutv를 사용한 경우, Sytstem.out.println("변수이름 = " + 변수) 와 같은 형태로 sout의 파라미터를 자동적으로 전달하도록 자동완성해준다.

인프런 - 스프링 핵심 원리 기본편 정리 그동안 설정(구성) 정보 클래스인 AppConfig에서 객체를 생성하고, 객체들 간의 의존 관계를 구성하며 주입하였다. 그리고 애플리케이션에서 사용하고자 하는 서비스는, AppConfig에서 생성한 서비스 객체를 참조하는 방식을 이용했다. Java Code를 통해 직접 DI를 주입했다면, 이번에는 스프링 컨테이너를 생성하고, 객체들을 스프링 빈으로 등록하여 스프링 컨테이너가 직접 객체들을 관리할 수 있도록 전환해보자. 본격적으로 스프링으로 전환을 해보도록 하자. 스프링 컨테이너의 계층 구조, BeanFactory와 ApplicationContext 우선 스프링 컨테이너의 계층 구조부터 살펴보자. 스프링 컨테이너의 상속, 계층 구조를 나타내면 다음과 같다. Bean..

기존에 https://dream-and-develop.tistory.com/358 에서 Spring Boot 프로젝트를 터미널에서 gradlew 명령어를 이용하여 Gradle 빌드 툴을 이용하여 빌드하고, jar 파일을 생성한 바가 있다. 이번에는 IntelliJ IDEA에서 빌드를 하고, jar 파일이 생성되는 과정을 눈으로 확인해보자. 우측의 Gradle 을 클릭하면 다음과 같이 hell-spring 에 대해 Gradle Tool 을 이용해 할 수 있는 작업들(Tasks)가 나타난다. build 디렉터리 내에 여러 작업을 수행할 수 있는 버튼이 있는데 우리는 다음의 순서로 작업을 실행할 것이다. 1) clean 2) build 3) jar 우선 clean을 누르게 되면, 좌측과 같은 프로젝트 구조를 ..

이전과 같이 로컬에서 IntelliJ에서 build한 스프링 프로젝트 애플리케이션을 띄우려 했는데, 다음과 같이 Port 8080 이 이미 사용 중에 있다는 Web server failed to start. Port 8080 was already in use. 라는 설명과 함께 오류가 발생하고 실행 종료가 되었다. 명령 프롬포트 cmd 창을 열어 nestat -ano 명령어를 치고, 로컬 주소에서 어떤 프로세스가 사용 중인지 확인을 해보자. TCP 프로토콜 0.0.0.0:8080 로컬 주소를 확인해보니, PID 3256 번의 프로세스가 실행 중임을 확인할 수 있었다. 이전에 다른 스프링 프로젝트를 실행하는 과정에서 jar 파일을 새로 생성하는 과정에서, 파일 실행을 눌러서 해당 8080 로컬 포트가 실행..