일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AutoConfiguration
- springwebmvc
- java
- Immutable
- 링킹
- DispatcherServlet
- Kotlin for Java Developers
- 프록시
- 메이븐
- 자바
- 링커
- gradle
- DesignPattern
- FunctionalInterfaces
- lambda
- 토비의스프링
- IOC
- 토비의스프링3.1
- hibernate
- String
- exception
- 컴퓨터시스템
- ApplicationContext
- beanfactory
- Spring
- 클린코드
- 빌드툴
- springboot
- ORM
- JPA
- Today
- Total
목록분류 전체보기 (98)
엔지니어로 가는 길
저번 정기 배포 때 리팩터링 했던 부분에서 실수가 있었다. CS가 인입됐고, 비정기 배포를 나가야 할 것 같다. 매우 간단한 수정이었는데, 그래서 방심했던 걸까. 리팩터링에서 가장 중요한 것은 리팩토링 전과 리팩토링 후가 같은 결과를 내야 한다는 것이다. 이걸 확신할 수 있는 방법은 눈이 아니라 테스트이다. 반드시 수정하려는 부분에 대한 테스트가 존재하는지 확인하고, 테스트가 존재한다면 수정하기 전후로 실행하여 같은 결과를 낸다는 것을 확인해야 한다. 수정하려는 부분에 대한 테스트가 없다면 테스트를 작성하고 수정해야 한다. 리팩터링 과정에서 실수를 하거나 사이드 이펙트가 발생해서 문제가 될 때면 리팩토링에 대한 의지가 사라지기 쉽다. 리팩토링을 한다고 해도 겉에서 볼 때는 티가 나지 않고, 지금도 멀쩡히..
@MockBean - Spring boot에서 제공하는 어노테이션으로 Spring 컨테이너에 mock을 추가하고 싶을 때 사용 - Mock이란 객체를 흉내 낸 객체 - Junit 4) @RunWith(SpringRunner.class) 어노테이션이 붙은 테스트 클래스에서 사용 - Junit 5) @ExtendWith(SpringExtension.class) 어노테이션이 붙은 테스트 클래스에서 사용 - Mock은 타입 또는 빈 이름에 의해 등록 가능 - 타입에 의해 등록될 때는 해당 타입의 빈이 하나 존재하는 경우 mock으로 대체 - 이름에 의해 등록될 때는 해당 이름을 가진 빈이 존재할 경우 mock으로 대체 - 두 경우 모두 빈이 존재하지 않는다면 mock을 추가 예시(출처: Spring boot d..

B 트리와 B+ 트리는 데이터베이스에서 유용하게 쓰이는 자료구조라고 한다. 왜 데이터베이스에서 유용하게 쓰일 수 있는지에 대해 살펴보자. Topics 1. 디스크 구조 2. 디스크에 데이터가 저장되는 방식 3. 인덱스 4. 멀티 레벨 인덱스 5. M-way 탐색 트리 6. B 트리 7. 레퍼런스 1. 디스크 구조 디스크는 트랙과 섹터를 통해 데이터를 구분한다. 트랙은 육상 트랙과 같은 의미로, 위의 그림에서 빨갛게 칠해져 있는 구역이 하나의 트랙이다. 섹터는 피자를 잘랐을 때 한 조각에 해당하는 영역이다. 트랙과 섹터의 교집합을 블록이라고 하며, 블록은 트랙 번호와 섹터 번호를 통해 식별 가능하다. 블록 주소 = 트랙 번호 & 섹터 번호 블록은 바이트 수만큼의 칸으로 나누어져 있으며 각각의 칸은 오프셋이..

아래 두 개의 글에 이어 이번이 세 번째 String 관련 글인 것 같다. Java String으로 보는 동일성과 동등성 Java StringBuilder를 쓰는 이유 Java String은 왜 불변일까? 불변이기 때문에 얻을 수 있는 장점에 대해 알아보자. 장점 1. 안전 Immutable이기 때문에 안전하다. 몇 개의 예시를 살펴보자. 1. 여러 참조 변수가 같은 String 객체를 참조하고 있다고 하더라도 안전하다. String 객체를 누가 조작할 수가 없기 때문이다. 2. String 객체를 이리저리 전달할 때 원본 String 객체가 저장된 주소 자체를 넘겨도 안전하다. 전달받은 곳에서 원본 값을 직접 읽을 순 있으나 조작할 수는 없기 때문이다. 장점 2. 성능 및 효율 Immutable은 안전..

1. Introduction 메멘토 패턴은 behavioral design pattern 중 하나로, 객체가 이전 상태를 복원할 수 있도록 해준다. 메멘토 패턴에는 개념적으로 다음의 세 객체가 필요하다. - Originator: 상태를 저장하고자 하는 대상으로 memento를 만들고, 소비하는 객체 - Memento: Originator의 상태를 저장할 객체(POJO) - Caretaker: Originator를 이용하여 여러 memento를 추적하는(keep track) 객체 2. Example 텍스트 에디터를 구현한다고 생각해보자. 일반적으로 텍스트 에디터들은 undo와 redo를 제공하는데, undo와 redo 기능을 구현하기 위해 메멘토 패턴을 사용해볼 수 있을 것 같다. 세 개의 클래스를 만들었..

1. Introduction 2. 실생활 속 어댑터 패턴 3. Spring 속 어댑터 패턴 4. Reference 1. Introduction 어댑터 패턴은 현실의 어댑터를 코드로 표현한 것이다. 서로 호환되지 않는 두 클래스를 호환되도록 만들어준다. 찾아보면 어댑터 패턴에 대한 글들이 굉장히 많은데, 각각의 글마다 어댑터 패턴에 대해 *약간씩 다르게 설명하는 부분이 있다. 하지만 어댑터 패턴이라는 건, 디자인 패턴이라는 건 자주 쓰이는 구조에 편의를 위해, 의사소통을 위해 이름을 붙인 것 뿐 깐깐한 기준이 있는 것은 아닐 것이다. 어댑터 패턴을 적용해야 하는 상황은 100번 있으면 100번 모두 디테일이 다를 것이므로 설명 역시 완전히 일치할 수 없는 것 아닐까? 어댑터 패턴을 엄밀하게 정의하려고 하지..

Origin Origin이란 URI 스키마(프로토콜), 호스트 이름(도메인), 포트 번호의 조합을 말한다. SOP Same-origin policy SOP에 의해 웹 브라우저는 하나의 웹 페이지에서 다른 웹 페이지의 데이터에 접근하기 위한 스크립트가 있을 때, 두 웹페이지가 같은 origin일 때만 이를 허가한다. 이로써 한 웹 페이지에서 다른 웹 페이지의 Document Object Model(DOM)*을 통하여 민감한 정보에 대한 접근을 얻기 위해 작성한 악의적인 스크립트를 막는다. * DOM is an API for HTML, XML documents. It defines the logical structure of documents and the way a document is accessed a..

목차 Introduction 절차적인 도형 클래스 객체적인 도형 클래스 객체 지향적인 코드 VS 절차 지향적인 코드 Reference Introduction 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료 구조*는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다. *여기서 말하는 자료 구조는 List나 Set과 같은 인터페이스가 아니라 정말 어떤 자료를 저장하기만 하는 클래스를 말하는 것 같다(이 글은 클린 코드의 일부 내용을 발췌한 글이다). C 언어의 struct와 유사할 것 같다. 이 글 내내 자료 구조는 이러한 뜻을 가진다. 구체적인 예시를 통해서 살펴보자. 절차적인 도형 클래스 위의 코드에서 도형 클래스는 절차적이다. Geometry 클래스는 두 가지 도형 클래스를..

Contents 1. Introduction 2. @Conditional 모든 Spring 프로젝트의 Configuration에서 공통되는 부분이 있다면? Configuration이 공유될 때 발생할 수 있는 문제 @Conditional @Conditional을 이용한 개선 3. AutoConfiguration Spring Boot 애플리케이션을 실행하면 일어나는 일 Spring Boot의 핵심적인 특징 세 가지 톰캣이 뜨는 과정(Spring Boot의 AutoConfiguration이 적용되는 과정) 4. Reference Introduction Spring Boot는 Spring 플랫폼과 써드 파티 라이브러리에 대한 *주관을 가지고 있기에 *요란한 동작 없이 Spring Boot로 애플리케이션 개발을..

문제 상황 로그인 정보를 제대로 입력했음에도 기대한 응답이 나오지 않았다. 분명 DB에 사용자 정보를 저장하였고, 저장된 정보를 POST 메소드에 담아 보냈는데 말이다. 정상적으로 코드가 동작한다면 응답 본문에 어떤 정보가 나와야 하는데, 위와 같이 응답 본문에 아무것도 뜨지 않았다. ('어떤 정보'라는 것은 BadCredentialException과 관련 없으므로 무시한다.) 로그에 에러가 보이지 않아서 디버거를 통해 따라가보았다. CustomAuthenticationFilter.class (extends UsernamePasswordAuthenticationFilter) attemptAuthentication 메소드를 수행하는 중에 BadCredentialException이 발생하였다. 원인 왜 Ba..