본문 바로가기

분류 전체보기

(126)
[Kotlin In Action] 1장. 코틀린이란 무엇이며, 왜 필요한가? Kotlin in Action 책에서 각 챕터의 Summary를 보며 부족한 키워드만 후라닥 정리하는 글. 안드정이 코틀린 인 액션 책 스터디하면서 정리한 자료도 참고할 예정 땡큐땡큐 정적 타입 지정 언어 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있음 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증 간결함, 정확성, 성능, 신뢰성, 유지 보수성 등의 장점 함수형 프로그래밍과 객체지향 프로그래밍 주요 개념 일급 시민 first-class 함수 함수를 일반 값 처럼 다룰 수 있음 변수 저장, 인자로 다른 함수에 전달, 함수 내에서 새로운 함수를 만들어 반환 불변성 immutability 일단 만들어지면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용 부수효과 없음..
[JPA] 기본 키 생성 전략과 각 전략의 차이 - GenerationType JPA에서 Entity 객체를 정의할 때 @Id 속성을 함께 정의하여야 한다. 이 Id를 정의할 때에는 직접 할당하는 방법과 자동 생성하는 방법이 있다. 직접 할당하는 방법 @Id 어노테이션만으로 id를 지정한다. 자동 생성 @Id와 @GeneratedValue를 같이 사용한다. GenerationType 옵션으로 전략을 지정한다. GenerationType 종류 TABLE 특정 벤더에 의존적이지 않다. 시퀀스 테이블을 만들어서 데이터베이스 시퀀스를 흉내낼 Id를 할당한다. 이 전략을 사용할 시, jpa ddl auto 설정이 되어 있지 않았다면 해당 시퀀스 테이블 생성이 선행이 되어야한다. @TableGenerator(테이블 생성 어노테이션)과 함께 사용할 수 있다. 만약 jpa ddl auto 설정이..
application.properties VS application.yml 그리고 YAML을 사용하면서 겪은 문제점 application.properties 설정 Spring Boot는key-value 형식을 사용하는application.properties파일설정 값들을 가져와 쓸 수 있다. spring.datasource.url=jdbc:h2:dev spring.datasource.username=SA spring.datasource.password=password 각 라인은 단 하나의 key-value로 이루어져있다. 닷(.)을 이용해 계층적 구조를 이룰 수 있다. Placeholders 값을 지정할 때, ${} 을 사용해 다른 환경 변수의 값을 참조할 수 있다. app.name=MyApp app.description=${app.name} is a Spring Boot application List 하나의 속성에 ..
AWS CloudFront와 S3 구성 2021-07-14 작성 들어가기 전 이 그림을 먼저 보자 Amazon CloudFront? Amazon CloudFront는 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹 서비스입니다. CloudFront는 엣지 로케이션이라고 하는 데이터 센터의 전 세계 네트워크를 통해 콘텐츠를 제공합니다. CloudFront를 통해 서비스하는 콘텐츠를 사용자가 요청하면 지연 시간이 가장 낮은 엣지 로케이션으로 요청이 라우팅되므로 가능한 최고의 성능으로 콘텐츠가 제공됩니다. 쉽게 말하면 AWS 에서 제공하는 CDN 서비스 캐싱을 통해 사용자에게 빠른 데이터 전송 속도를 제공함을 목적으로 함 전세계 여기저기에 Edge Server를 두고 클라이..
S3를 사용하는 환경에서 LocalStack을 통한 통합 테스트 놀토는 이미지 저장소로 AWS의 S3를 사용한다. 하지만 S3에 대한 쓰기 작업은 우테코 측해에 권한을 부여한 EC2에서만 가능했으며 accesskey와 secretkey도 받을 수 없었기 때문에, 로컬 환경에서는 S3를 사용하는 서비스에 대해서 테스트를 진행할 수 없었다. AWS의 S3를 이용하는 서비스단을 통합 테스트하는 방법으로 LoacalStack을 이용하는 방법을 제시해줬는데, 이를 사용하는 통합테스트를 진행한 과정들을 기록한다. Localstack? LocalStack provides an easy-to-use test/mocking framework for developing Cloud applications. It spins up a testing environment on your loc..
[JPA 프로그래밍 기본기 다지기] JPA 내부구조 노트 2021-05-29글 영속성 컨텍스트 엔티티를 영구히 저장하는 환경 영속성 = 영구히 저장하는 속성 EntityManager.persist(entity) 영속성 컨텍스트는 논리적인 개념 (눈에 보이지 않음) 엔티티 매니저를 통해 영속성 컨텍스트에 접근 스프링 프레임 워크에서의 영속성 컨텍스트 엔티티 매니저와 영속성 컨텍스트가 N:1 같은 트랜잭션이면 같은 영속성 컨텍스트에 접근 엔티티 매니저 팩토리와 엔티티 매니저 요청이 들어와 이걸 처리하는 스레드가 하나 생성될 때마다 새로운 엔티티 매니저를 만든다. 엔티티 매니저에서 내부적으로 데이터베이스 커넥션 풀에서 JPA를 사용 엔티티의 생명 주기 비영속 (New) 객체를 생성한 상태 Team team = new Team(); team.setName("teamA..
생활코딩 OAuth 2.0 강의와 놀토의 OAuth 개요 나의 서비스가 사용자를 대신해 그들의 서비스의 기능에 접근한다. 사용자로부터 그 사용자가 사용하고 있는 그들의 서비스에 접근할 수 있도록 허가를 받아야 함 근데 사용자 입장에서는 처음 보는 서비스에게 그들의 서비스 인증정보를 맡기긴 무서움 제 삼자가 내 인증정보를 가지고 있는 것임 OAuth 프로토콜을 써보자! 그들의 서비스가 accessToken을 발급해줌 (아이디와 비번이 아님) 나의 서비스가 필수적으로 필요한 기능만 허용함 우리의 서비스는 accessToken를 통해 그들의 서비스를 이용할 수 있음 회원의 아디와 비번을 가지지 않아도 됨 역할 Resource Owner User 우리의 서비스를 이용하는 사용자 우리가 제어하고자 하는 자원의 소유자 나의 서비스를 이용하는 클라이언트 Client ..
[Clean Code] 3장 - 함수 작게 만들어라! 함수가 작을 수록 그 하는 일이 명백해진다. public static String renderPageWithSetupsAndTeardowns( PageData pageData, boolean isSuite) throws Exception { if (isTestPage(pageData)) includeSetupAndTeardownPages(pageData, isSuite); return pageData.getHtml(); } 되도록 위 예시만큼 짧아야 한다. 블록과 들여쓰기 if/else, while문 등에 들어가는 블록은 한 줄이어야 한다. 대개 여기서 함수를 호출한다. 각 함수 별 들여쓰기 수준은 2단을 넘어서지 않아야 한다. 한 가지만 해라! 함수는 한 가지를 해야 한다. 그 한가지를..