일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 컴퓨터시스템
- 메이븐
- hibernate
- gradle
- ORM
- exception
- FunctionalInterfaces
- springboot
- lambda
- 링킹
- String
- springwebmvc
- JPA
- 토비의스프링3.1
- DesignPattern
- 클린코드
- DispatcherServlet
- AutoConfiguration
- 자바
- 토비의스프링
- IOC
- 링커
- Kotlin for Java Developers
- beanfactory
- 빌드툴
- ApplicationContext
- 프록시
- java
- Spring
- Immutable
- Today
- Total
목록분류 전체보기 (98)
엔지니어로 가는 길
이번에 팀프로젝트로 웹서비스를 개발하는데 스프링으로 백엔드를 개발하게 되었다. 자바와 스프링은 내가 가장 관심 있는 분야이다. 그래서인지 이전 팀프로젝트와는 달리 의욕이 넘친다. 혼자 구조를 설계해보고 코드도 짜보고 있다. 하루 일과중 지쳐서 다른 것들을 별로 하고 싶지 않을 때 살짝 쉬는 느낌으로 이 프로젝트의 코드를 짜곤 한다. 기쁜 마음으로 스프링을 잘 모르는 팀원들을 위해 스프링의 기초에 대해 문서화하여 공유하고 있다. 스프링과 자바를 집중적으로 공부하다보니 흥미가 더 붙었고, 흥미는 다시 공부로 이어져서 선순환을 만들어낸 것 같다. 앞으로 스프링과 자바가 더 좋아질 것 같다. 아직 많이 부족하고, 더 잘하고 싶고 그래서 계속 공부를 하다보면 더 흥미가 생길테니까 말이다. 이 프로젝트 만큼은 가성..

Facade Pattern(퍼사드 패턴) 퍼사드 패턴은 서브시스템에 있는 인터페이스들에 대한 통합된 인터페이스를 제공한다. 퍼사드란 서브시스템을 더 쉽게 사용할 수 있도록 만드는 더 높은 수준의 인터페이스를 말한다. 퍼사드 패턴의 등장인물 및 역할은 다음과 같다. Facade: 클라이언트의 요청을 적절한 서브시스템 클래스에 위임한다. Subsystem classes: 서브시스템 기능을 구현한다. 서브시스템 클래스는 facade에 의해서만 사용된다. Client: Facade에게 특정 행동을 수행해달라고 요청한다. 온라인 쇼핑몰에서의 주문 시스템을 예로 들어보자. 현재의 상황에서 클라이언트는 서브시스템 클래스에 의해 구현된 서비스들과 다수의 상호작용을 해야하며, 서브시스템 클래스에 대한 정보를 알고 있어야..

@Embedded와 @Embeddable 다음과 같은 상황을 생각해보자. ToDo class 오늘 할 일 하나를 나타낸다. TDL class to-do-list를 나타낸다. List 타입의 객체를 프로퍼티로 갖는다. 이때 db에 위와 같은 정보를 저장하고 싶다면 어떻게 해야 할까? 가장 먼저 떠올린 방법은 ToDo를 하나의 테이블에 매핑하고, TDL 또한 하나의 테이블에 매핑한 뒤 두 클래스를 One-To-Many와 Many-To-One 관계를 맺게 하는 것이었다. 하지만 생각해보니 ToDo 클래스는 항상 TDL 안에서만 존재하며, TDL을 부르지 않고 ToDo만 불러올 일이 없을 것 같았다. 그래서 ToDo를 TDL의 Embedded로 설정하였다. Embedded로 설정하는 방법은 다음과 같다. ToD..
Modules 모듈은 하나 이상의 패키지를 갖는다. 모듈은 full Java app일 수도, a Java Platform API일 수도 또는 a third party API일 수도 있다. Modules Benefits 1. 군더더기를 제거함으로써 애플리케이션이 알맞은 덩치를 갖게 한다. 프로젝트 Jigsaw(JPMS = Java Platform Module System = Java Jigsaw = Project Jigsaw)의 일환으로 모든 Java Platform API는 별도의 모듈들로 쪼개졌다. 이로써 자신의 어플리케이션에서 필요한(실제로 사용할) 모듈들만 명시할 수 있게(가질 수 있게) 되었다. JPMS가 없는 Java 9 이전에는 모든 Java Platform API들을 애플리케이션에 패키징해야..

Type Inference 자바 컴파일러가 타입을 추론하는 것을 Type Inference라고 한다. 컴파일러는 추론을 위해 method invocation과 그에 상응하는 declaration을 살펴본다. 추론 알고리즘은 인자의 타입을 결정하고, 가능한 경우에 결과가 할당되는 타입 또는 리턴되는 타입까지 결정한다. 추론 알고리즘은 모든 인자와 어울리는 선(공통 부모)에서 가장 구체적인 타입을 찾는다. 아래의 pick 메소드를 살펴보자. pick 메소드의 type 매개변수는 T이고 메소드의 매개변수 a1과 a2 모두 T이다. 하지만 pick을 호출할 때 첫 번째 인자로 String을 주었고 두 번째 인자로 ArrayList를 주었다. 이런 경우에 모든 인자와 어울리는 선(공통 부모)이란 Serializa..

위와 같은 클래스가 있을 때, 이런 Handler를 작성하고, 이런 테스트 코드를 작성한다면 어떻게 될까? 익숙한 예외가 발생한다. path variable로 들어온 "test"라는 문자열을 ToDo 클래스로 변환할 수 없다는 것이다. 이 경우 Formatter를 등록해야 하는데 오늘 우연히 다른 방법을 알게되었다. 위와 같이 String 타입 매개변수를 하나 갖는 생성자가 있는 경우 Formatter 없이도 conversion이 이루어진다. 굳이 String 타입 매개변수를 갖는 생성자를 추가하기 보다는 Formatter를 등록하는 편이 명시적이고 좋을 것 같다. 필요에 의해 그런 생성자를 만들어둔 경우라 하더라도 Formatter를 등록하는 게 좋을 것 같다. p.s. spring boot

PathVariable로 LocalDate 꼴의 문자열을 LocalDate 타입의 객체로 받는 메소드를 만들고 싶었다. 테스트 코드를 작성하였다. 결과는 실패. 메소드 인자 타입이 맞지 않아서 문제가 되었다고 하니 String을 LocalDate 타입으로 변환해주는 게 default로 설정되어있지는 않은가 보다. LocalDate 타입 정도는 등록되어있을 줄 알았기 때문에 살짝 당황했다. 그래서 Formatter를 만들었다. Formatter 만들어 등록하면 String과 Object 간의 변환이 가능해지기 때문이다. Spring boot를 이용할 경우 Formatter를 bean으로만 등록해주면 알아서 등록이 이루어진다. 근데 테스트가 또 깨졌다. 같은 이유로 말이다. Formatter가 제기능을 못했..

2020 네이버 오픈클래스를 참가하고 얻은 것들 1. 네이버에 대한 지식 2. 취업 준비를 위한 대략적인 방향 3. 토트백 2주 정도 연락이 없어서 누락됐나 걱정하고 있었는데 오늘 도착하셨다. 굉장히 크다. 15인치 노트북이 들어가고도 남는다. 재질은 방수가 될 것만 같은 재질이다. 깨알같다. 여기에까지 NAVAR가 박혀있는 것을 보고 조금 놀랐다. 디테일! 가방 안에 주머니가 하나 있다. 그 주머니 안에 가방을 넣어 보관할 수가 있다. 이런건 처음봤다. 네이버의 이익을 위해 참가해준게 아니라 나의 이익을 위해 참가 신청을 한 건데 사은품까지 받았다. 매우 감사하고 신난다. 잘 들고 다녀야지. 네이버 티셔츠를 줬어도 잘 입고 다녔을텐데!

Error java.lang.Error 클래스의 서브 클래스들이 해당된다. 에러는 시스템에 뭔가 비정상적인 상황이 발생했을 경우 사용된다. 그래서 주로 JVM에서 발생시킨다. 애플리케이션 코드는 에러를 잡으려고 하면 안 된다. 아무런 대응 방법이 없기 때문이다. Exception java.lang.Exception 클래스와 그 서브클래스들이 해당된다. 에러와 달리 애플리케이션 코드의 작업 중 예외상황이 발생했을 경우 사용된다. Exception 클래스는 체크 예외와 언체크 예외로 구분되는데, 전자는 RuntimeException을 상속하지 않은 것들이고, 후자는 상속한 클래스들을 말한다. Checked Exception(체크 예외) 일반적으로 예외라고 하면 Exception 클래스의 서브클래스 중에서 R..

JAVA SE 8 이후의 Annotations 1. Type Annotations and Pluggable Type Systems 자바8 이전에는 어노테이션이 declarations에만 적용될 수 있었다. 하지만 자바8부터 어노테이션이 type use에도 적용될 수 있다. 다시 말해, 타입을 사용하는 곳이면 어디든 어노테이션을 사용될 수 있다는 뜻이다. Class instance creation expression: Type cast: Implements clause: Thrown exception declaration: 이러한 형태의 어노테이션을 타입 어노테이션이라 부른다. 타입 어노테이션은 analysis of java code를 향상시키고 더 강한 type checking을 보장할 수 있다. 특징 ..