일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- 파이썬
- spring boot
- 코딩테스트
- 해시
- 컴포넌트스캔
- 구조체배열
- 카카오
- 시스템호출
- 스프링
- 코테
- C언어
- OpenCV
- thymeleaf
- 카카오 코테
- python
- TypeORM
- nestjs auth
- Nodejs
- git
- 프로그래머스
- AWS
- @Autowired
- 가상면접사례로배우는대규모시스템설계기초
- C++
- Spring
- nestjs typeorm
- nestJS
- 카카오 알고리즘
- @Component
- Today
- Total
목록# Tech Studies/Java Spring • Boot (45)
공부 기록장 💻
보호되어 있는 글입니다.
자바 ORM 표준 JPA 프로그래밍 - 기본편(인프런) 참고 Flush란? 플러시란, 영속성 컨텍스트의 변경 내용(Insert, Update, Delete 등)을 데이터베이스에 반영하는 것을 말한다. Flush 발생한 경우에는, 1) 변경을 감지하고 2) 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록하고, 3) 쓰기 지연 SQL 저장소의 쿼리들을 데이터베이스에 전송하게 된다. Flush를 수행하는 방법들 em.persist(memberA); em.persist(memberB); em.persist(memberC); // JPQL 실행 query = em.createQuery("select m from Member m", Member.class); List members = query.getResultL..
자바 ORM 표준 JPA 프로그래밍 - 기본편(인프런) 참고 JPA란? JPA는 Java Persistent API의 줄임말로, Java 진영의 ORM 기술 표준이다. 여기서 ORM (Object Relational Mapping) 이란, 객체와 관계형 데이터베이스를 매핑해주는 기술이다. 객체 지향 프로그래밍에서 객체는 객체대로 설계하고, 관계형 DB에서서는 DB, Table 대로 설계했을 때, ORM 프레임워크가 중간에서 이 둘을 연결하는 역할을 한 것이다. JPA와 JDBC JPA는 Java 어플리케이션이 DB와 SQL 문을 통해 연결되는 Connection 기술인 JDBC API와 JVM 사이에서 JDBC API를 보다 더 간단하게 사용할 수 있게 도와주는 중간다리의 역할을 한다. JPA를 왜 사용..
인프런 - 스프링 핵심 원리 기본편 정리 빈 스코프란? 스프링 빈은 스프링 컨테이너의 시작과 함께 생성되어, 스프링 컨테이너가 종료될 때까지 유지된다. 이는 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 떄문이다. (이전에 싱글톤 패턴이 무엇인지, 그리고 스프링의 싱글톤 컨테이너에 대해 학습한 적이 있다.) 스코프란 빈이 존재할 수 있는 범위를 말하며, 싱글톤 스코프 외에 스프링에서 지원하는 다양한 스코프에 대해 알아보도록 하자. 스프링에서 지원하는 스코프 싱글톤 스코프: 기본 스코프로, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 스코프: 스프링 컨테이너가 프로토타입 빈의 생성, 의존관계 주입까지만 관여하고 더이상 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코..
프로젝트를 진행하는 도중, 인터페이스 문서에서 Json 데이터로 Response Body를 보낼 때, json의 key 값에 언더바 문자 '_' 가 들어가는 것을 확인하였다. 오래전에 프론트와 상의하여 API 문서를 만들었을 때에는 DB의 각 칼럼에 데이터들을 저장할 것 까지 고려하여 json 형식의 데이터 key 값으로 underline이 포함되는 것을 크게 개의치 않았다. 하지만 개발을 하면서 바로 DTO를 통해 json 데이터를 전달해야 하는 경우 underline이 포함되는 key에 대해 어떻게 처리를 해야 하나 고민을 하게 되었다. 그러던 중 Jackson annotation에서 제공하는 @JsonProperty 를 이용해 값을 프론트에게 전달할 때, key의 이름을 변경할 수 있다는 것을 알게..
문제의 원인 알라딘에서 제공하는 Open API 중 키워드를 통한 도서 검색 API, 관심사 카테고리에 따른 도서 목록 API를 이용하여 입력 값에 따른 도서 목록을 보여주는 프로젝트를 진행하는 중, 도서 목록 결과 페이지에서 model의 attribute으로 등록한 회원 정보가 타임리프 문법의 오류로 나타나지 않는 문제가 발생했다. 도서 목록 결과를 조회하기 위해 특정 값을 입력하는 경로는, 현재까지 아래의 두 가지 방식이 있다. 기본적인 회원 정보를 입력하여, 관심사에 따른 추천 도서 목록 추출 키워드 검색을 통한 도서 목록 추출 1. 기본적인 회원 정보를 입력하는 페이지 간단하게 이름, 나이를 비롯한 개인 정보를 입력 및 선택하는 방법이다. 선택된 관심사에 맞게 추천 도서 목록을 반환한 페이지는 다..
보호되어 있는 글입니다.
Thymeleaf Template Engine 문법(img th:src)을 이용해 이미지를 View에 업로드해보자 기존 html 에서 image url 값을 통해 이미지를 시각적으로 나타내기 위해서는 와 같은 형태를 사용했다. Thymeleaf Template Engine을 사용해 이미지를 업로드 할 때는 Thymeleaf 문법을 어떻게 사용해야 할까? String 타입의 url 링크를 받아온 값에 대해, 와 같이 사용해주면 된다. Title 아래와 같이 로컬에서 테스트했을 때, View 결과 화면에서 이미지가 잘 나타나는 것을 확인할 수 있다.
알라딘 도서 검색 Open API를 활용하여 얻은 도서 목록 결과를 List에 담아 View에 전달하기 알라딘 도서 검색 Open API를 이용해 특정 쿼리에 대한 검색 결과로 JSON 형태의 데이터를 받아, 이를 Thymeleaf Template Engine을 이용해 직접 만든 View에 결과를 출력하고자 한다. 각 도서 객체는 "BookSearchResult" 에 담았으며, 이를 List에 담아 전체 도서 목록 결과를 출력해보자. Form 메인 홈에서 query를 입력하는 form은 다음과 같다. /book/result 경로로 GET 요청을 보내는 form이다. 키워드 입력: 완료 Controller Controller은 다음과 같이 작성해주었다. @RequestMapping의 GET 요청을 "/bo..
인프런 - 스프링 핵심 원리 기본편 정리 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링 빈은 간단하게 1. 객체 생성 후, 2. 의존 관계 주입 을 하는 라이프사이클을 가진다. (단, 생성자 주입의 경우는 예외이다) 스프링 빈은 객체를 생성하고, 의존 관계 주입이 다 끝난 후에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업(초기 작업 시작)은 의존 관계 주입이 모두 완료되고 난 후에 호출해야 한다. 그러나 의존 관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? 스프링은 의존 관계 주입이 완료되면 스프링 빈에게 ..
인프런 - 스프링 핵심 원리 기본편 정리 스프링 빈의 자동, 수동 등록 방식 그동안 스프링 컨테이너에 스프링 빈을 등록하는 방식 중, 스프링 빈을 자동적으로 등록하는 방식, 수동적으로 등록하는 방식에 대해 학습하였다. 수동 등록의 경우, 직접 new()를 통해 구현 객체를 생성하고, 의존 관계를 직접 주입하여 @Bean 을 이용해 스프링 컨테이너에 각 스프링 빈을 등록하는 java 코드 방식 또는 xml 방식이 있었고, 자동 등록의 경우, @ComponentScan을 통해 @Component 가 붙은 객체들을 스프링 빈으로 자동 등록하고, @Autowired를 통해 의존 관계를 자동적으로 주입하는 컴포넌트 스캔 방식이 있었다. 실무적으로는 어떻게 올바르게 운영하는 것이 좋은가? 편리한 자동 기능을 기본으..
인프런 - 스프링 핵심 원리 기본편 정리 전략 패턴이란? 할인 서비스를 제공하는 시스템에서, 클라이언트가 직접 할인의 종류(고정 할인 정책, 비율 할인 정책)를 선택할 수 있는 상황을 가정하면, 디자인 패턴 중 하나인 전략 패턴(strategy pattern)에 기반하여, 동일한 타입 내의 모든 스프링 빈을 조회하는 방식으로 이를 구현할 수 있다. 전략 패턴의 단어 정의를 간단히 살펴보면 다음과 같다. 전략 패턴(strategy pattern) 또는 정책 패턴(policy pattern)은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. 전략 패턴은 특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. 전..
인프런 - 스프링 핵심 원리 기본편 정리 조회되는 스프링 빈이 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 구현체 매번 생성하고 있음을 확인할 ..