본문 바로가기

분류 전체보기

(593)
Clean Architecture (로버트 C. 마틴) - 1 이 글은 로버트 C. 마틴의 'Clean Architecture'를 읽고 정리한 문서이며, 총 3부작으로 구성되어 있습니다. Clean Architecture (로버트 C. 마틴) - 2 Clean Architecture (로버트 C. 마틴) - 3 [ CHAPTER 1 ] 소개 #1. 프로그램이 동작하도록 만드는 데 엄청난 수준의 지식과 기술이 필요하지는 않다. 언제든 어린 고등학생이라도 할 수 있는 일이다. 이들이 작성한 코드는 그다지 깔끔하지 않을 순 있지만, 동작은 한다. 프로그램을 동작하게 만들기는 그리 어려운 일이 아니기 때문이다. 하지만 프로그램을 제대로 만드는 일은 전혀 다르다. 소프트웨어를 올바르게 만드는 일은 어렵다. 소프트웨어를 제대로 만들려면 적정 수준의 지식과 기술을 겸비해야 하지..
postman으로 전송한 DTO가 계속 null로 온다면.. postman으로 POST 요청을 보낼 때 받는 쪽 Controller에서 DTO가 null인 상황이 나왔다. 처음엔 통신 쪽에 문제가 있나 싶었는데 결국 원인은 postman으로 DTO를 만들어서 보낼 때 JSON 형식이 제대로 되어있지 않았던 것이다. 클래스 명으로 묶을 필요가 없었는데 나는 클래스명으로 데이터를 한번 더 묶은 게 잘못된 형식의 원인이었다. { "id": 1, "title": "mi", "content": "con" } 위와 같이 보내면 JSON 타입으로 잘 변환되는데 { "MyDTO": { "id": 1, "title": "mi", "content": "con" } } 이렇게 감싸버려서 문제가 발생했었다.
JPA 사용 도중 DB에 값이 있는데도 findById()가 empty라면.. Spring에서 JPA를 이용해 DB의 값을 꺼내오던 도중 분명히 있는 값인데도 Repository의 findById()를 호출하면 Optional.Empty를 반환하는 현상을 마주하였다. 그래서 findById() 직전에 findAll()을 먼저 호출해보았다. 그랬더니 findAll()의 결과값이 제대로 나왔고 findById()에서도 DB에 있던 값이 잘 리턴되었다. 흠... JPA 뉴비의 관점에선 영속성에 문제가 있는 건가 싶었다. 그런데 이 함수들을 호출하기 직전에 내가 persist()를 한 것도 아니었으니 DB와 1차 캐시간의 싱크가 어긋나진 않았을 거 같은데.. 구글느님께 물어보니 이 현상은 영속성보단 DB의 연관관계 쪽에 원인이 있었다. 나의 프로그램은 A객체가 자식으로 B객체를 가지고 있..
스프링 기본 1. 웹 개발 방법은 1) 정적 컨텐츠, 2) MVC와 템플릿 엔진, 3) API 방식이 있다. 1) 정적 컨텐츠 => resources/static/에 있는 HTML등의 파일을 그대로 클라이언트에게 던져준다. => 동적으로 파일 내용을 변경할 수는 없다. 2) MVC와 템플릿 엔진 => 서버에서 파일을 필요에 따라 변경한 후 클라이언트에게 던져준다. => MVC는 Model, View, Controller 로 구성되어 있다. View는 화면을 그리는데 집중한다. Controller, Model은 Business Logic 관리에 집중한다. => 클라이언트 요청은 Controller에게로 전달되고, Controller가 보낸 요청은 ViewResolver에 의해 특정 View로 전달된다. => 클라이언트..
데미안 (헤르만 헤세) “새는 알에서 나오려고 투쟁한다. 알은 세계다. 태어나려는 자는 하나의 세계를 깨뜨려야 한다. 새는 신에게로 날아간다. 신의 이름은 아브락사스.” “나는 내 속에서 솟아나오는 것, 바로 그것을 살아보려고 했다. 그것이 왜 그토록 어려웠을까?” 위의 두 구문은 나에게 다가오는 책 의 모습이다. 싱클레어는 기독교 집안에서 기독교 세계관을 교육받으며 자랐다. 싱클레어는 초등학생 시절 프란츠 크로머라는 질 나쁜 친구와 엮이면서 따뜻한 가족, 천국이 있는 기독교 세계에서 어둠의 세계로 빠져드는 경험을 한다. 이 때 데미안이라는 친구가 나타나 싱클레어를 어둠의 세계에서 구해준다. 데미안이 이 사건을 알고 나자 프란츠 크로머가 더 이상 싱클레어를 괴롭히지 않았기 때문이다. 그렇다고 데미안이 기독교 세계관을 곧이 곧대..
JPA 기본 정리 1. JPA의 탄생 객체 지향 관계형 데이터베이스 이슈(패러다임 불일치 이슈)를 해결 하기 위한 ORM 표준 기술. Hibernate는 JPA의 실제 구현체이다. 2. JPA에서 관리하는 객체는 @Entity 어노테이션을 적어주어야 한다. 3. JPA에서 Entity를 DB와 매핑하기 위해서는 @Id 어노테이션을 적어주어야 한다. 4. JPA에서 가장 중요한 두 가지 축은 1) 영속성 컨텍스트, 2) 객체와 테이블 매핑 이다. 5. 영속성 컨텍스트 1) persist() => 1차 캐시에 Entity를 저장 2) commit(), flush(), 쿼리를 날릴 때 => DB에 적용 3) 쓰기 지연 SQL 저장소는 persist(), dirty check를 탐지해서 INSERT, UPDATE SQL을 보관한..
LNK2019 에러와 네임 맹글링, 그리고 extern LIVE555로 Frame을 받아서 FFMPEG에서 Decoding 하는 프로그램을 만드는 중에 FFMPEG의 함수를 사용하는 부분에서 자꾸 LNK2019 에러가 발생하였다. 몇 번의 삽질 끝에 해결하였는데,이 과정에서 알게 된 내용은 아래와 같다. 1. LNK2019 에러 Linker > General > Additional Library Directories에 경로를 추가해도 해결이 안될 때에는 Linker > input > Additional Dependencies 에도 lib 파일을 추가해주어야 한다. 예를 들어 FFMPEG 라이브러리를 추가하고 싶은 경우 avformat.lib, avcodec.lib 등의 lib 파일 이름을 적어주면 오류가 해결된다. 2. 네임 맹글링 (Name Mangling..
Winform UI Component의 Dock 스타일 적용이 잘 안 될 경우 Winform UI를 구성하면서 Dock 스타일을 적용시킬 때, UI Component들끼리 서로 겹치는 경우가 있다. 이 경우 Visual Studio Designer에서 해당 UI Component를 오른쪽 클릭하여 Bring To Front를 선택하면 Dock 스타일을 겹치지 않게 적용시킬 수 있다.