일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Visitor pattern
- 토비의 봄
- Optional
- springboot
- 챗봇
- DtoToEntity
- reflection
- spring
- Modelmapper
- double dispatch
- linebot
- Dynamic dispatch
- webhook
- java
- line messaging api
- annotation
- EntityToDto
- ngrok
- getOrCreate
- visitor proxy pattern
- Controller
- enum
- NullPointerException
- mapping
- static dispatch
- Today
- Total
목록전체 글 (16)
database by narae :p
- 컨테이너형 가상화 기술을 구현하기위한 상주 애플리케이션 - 이 애플리케이션을 조작하기 위한 명령행 도구(CLI) 로 구성되는 프로덕트. 애플리케이션 배포에 특화되어 있기 때문에 애플리케이션 개발 및 운영을 컨테이너 중심으로 할 수 있다. - 컨테이너 : 도커가 만들어내는 게스트 운영체제 # 특징 ## 개발환경 구축 로컬 환경에 도커만 설치하면 몇줄짜리 구성파일(Dockerfile)과 명령어 한 줄로 애플리케이션이나 미들웨어가 이미 갖춰진 테스트용 가상환경(도커 컨테이너)을 빠르게 구축할 수 있다. 가상화 소프트웨어와 비교해도 오버헤드가 적어진다는 장점이 있다. ## 운영 환경 도커는 개발 후 운영 환경에 대한 배포나 애플리케이션 플랫폼으로 가능하다. 기존 가상화 소프트웨어보다 더 가볍게 동작하기 때문..
의존 관계 Supplier의 변화가 Client에 영향을 주는 경우 - Supplier가 Client의 필드 - Supplier가 Client 메소드의 파라미터 - Supplier가 Client의 로컬 변수 - Supplier로 메시지를 보냄 => 재사용 가능한 객체 지향 설계/개발이 어렵다. Client는 재사용이 어렵다 Client는 컴포넌트/서비스가 될 수 없다. 오브젝트 패턴은 런타임시 바뀔 수 있는, (상속 관계보다) 더 동적인 오브젝트 (의존) 관계를 다룬다. - 생성 관련 패턴 (Creational Pattern) : 객체 인스턴스 생성을 위한 패턴으로, 클라이언트와 그 클라이언트에서 생성해야 할 객체 인스턴스 사이의 연결을 끊어주는 패턴 싱글턴, 팩토리 메소드, 추상 팩토리, 프로토타입, ..
트랜잭션 격리 수준 애플리케이션에서 여러 트랜잭션이 동시에 같은 데이터를 대상으로 작업을 수행할 때 여러 트랜잭션이 다른 트랜잭션과 어떻게 격리되어야 하는지 분명하게 지정해야 한다. READ UNCOMMITTED 트랜잭션 A가 특정 컬럼 데이터를 변경하고 있는 중에(커밋되지 않은 상태) 다른 트랜잭션 B가 read하면 트랜잭션 A가 변경한 데이터(커밋되지 않은 데이터)를 읽어온다. DIRTY READ : 트랜잭션 B가 읽어온 데이터를 사용하는데, 트랜잭션 A가 변경한 데이터를 롤백하면 데이터 정합성에 문제가 발생한다. READ COMMITTED 트랜잭션 A가 특정 컬럼 데이터를 변경하고 있는 중에(커밋되지 않은 상태) 다른 트랜잭션 B가 read하면 트랜잭션 A가 변경하기 전 데이터(커밋된 데이터)를 읽..
영속성 컨텍스트 => 엔티티를 영구 저장하는 환경 => 엔티티 매니저로 엔티티를 저장하거나 조회하면, 엔티티 매니저는 영속성 컨텍스트에 인티티를 보관하고 관리한다. 영속성 컨텍스트의 특징 ⁃ 식별자 값 : 영속성 컨텍스트는 엔티티를 식별자 값(@Id)으로 구분한다. 따라서, 영속 상태는 식별자 값이 반드시 있어야 한다. ⁃ 데이터베이스 저장 : JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영한다. 이를 flush라고 한다. ⁃ 장점 : 1차 캐시, 동일성 보장, 트랜잭션을 지원하는 쓰기 지연, 변경 감지, 지연 로딩 엔티티 생명주기 비영속 (new/transient) : 영속성 컨텍스트와 관계 없는 상태 영속 (managed) : 영속성 컨텍스트에 저장된..
챗봇은 입력받은 메시지에 대한 기능을 수행하고 답장을 보내며 사용자와 대화합니다. 저는 이번에 스프링 부트로 가계부 챗봇을 개발하며, 명령어에 대한 요청을 처리하는 '챗봇 컨트롤러'를 만들게 되었습니다. LINE Messaging API에는 @LineMessageHandler라는 어노테이션이 있어, 해당 어노테이션을 붙인 클래스에서 채팅방에서 일어나는 Event에 대해 다음과 같이 EventMapping을 하여 기능을 수행할 수 있게 합니다. 이렇게 해서 사용자에게 메시지가 들어오는 MessageEvent를 처리할 수 있습니다. 챗봇을 개발하던 초기에 저는 메시지에 맞게 기능을 처리하기 위해 MessageHandler의 handleTextContent 라는 메서드에 다음과 같은 코드를 작성했습니다. 이 ..
Entity 클래스란 JPA에서 실제 데이터베이스의 테이블과 매칭되는 클래스입니다. JPA를 사용하면서 Entity 클래스를 작성하였고, 프로젝트 초기에는 Entity로 Repository 뿐만 아니라 Service, Controller 영역까지 사용하였습니다. Entity를 화면에 띄우는 데까지 사용하다 보니 양방향으로 연결된 엔티티는 순환 참조 문제가 발생하였고, 다른 Entity를 참조하고 있는 경우 현재 Entity 뿐만 아니라 다른 Entity에도 원치 않는 변경이 일어나거나, 무거운 양의 데이터를 들고 여러 영역을 오가는 것이 성능 상에도 좋지 않을 것으로 생각하였습니다. 따라서 DB Layer에는 Entity, View Layer에서는 DTO를 사용하여 역할을 분리하여 Entity와 DTO가..
스프링 데이터 JPA를 사용하며 CrudRepository의 findById 메서드 리턴 타입인 Optional 클래스에 처음 접하게 되었습니다. Optional은 Java 8에 추가된 새로운 API로 이전에 하던 '고통스러운 null 처리'를 '잘' 다룰 수 있게 도와주는 클래스라고 합니다. 저는 Optional 클래스를 처음 접하게 되며, "대체 이런걸 왜 쓰는 거야?" 라는 의문을 강하게 품고 있었습니다. 아마 그 이유는 제가 Optional을 Optional답게 사용하지 못했던 것 때문이라고 생각합니다. NullPointerException Null 처리를 돕는 Optional 클래스에 대한 글이기 때문에 NullPointerException에 대해 먼저 이야기하며 시작하겠습니다. class Ac..
현재 프로젝트를 진행하며 백엔드는 스프링 부트로 개발하고 실제 보이는 플랫폼은 라인봇을 사용하게 되었습니다. 이 글에서는 1. 라인봇 채널 생성 2. 샘플봇(line-bot-sdk-java) 사용하기 3. ngrok을 이용한 로컬 네트워크 터널링 4. 샘플봇이 잘 동작하는지 확인 5. 개인 프로젝트에 적용하기 (Spring Boot) 다섯 단계에 대한 내용을 다룰 것입니다. 1. 라인봇 채널 생성 1.1. Line Developer 계정 및 Provider 생성 https://developers.line.biz 에서 Line Developer 계정을 생성하고 로그인을 하면, 다음과 같이 Provider를 생성하는 화면이 나타납니다. [ Create New Provider ] 버튼을 클릭하여 Provide..