본문 바로가기

전체279

이력서 리팩토링 워크숍 강의 후기 이력서를 작성할 때는 가장 먼저 어떤 개발자가 되고싶은지 아는 것이 중요하다. 해당 워크숍을 진행하면서, 딱 한 가지 생각했으면 하는 것이 있다. "나를 채용해야 하는 이유는?" 강의를 듣는 내내 위 질문에 대한 답변을 고민하는 것이 중요했습니다. 위 질문에 대한 답변은 어떻게 되든 "회사에 직접적으로 기여할 수 있는 역량으로 어필해야 한다." 그러므로, 내가 가진 역량을 회사에 기여할 수 있는 내용이 무엇인지 고민해보자. -- 이력서는 누가 읽는가? 사람이 읽기 때문에 읽기 편해야 한다. 어떤 사람이 읽는가? 개발리더에게 매력적이어야 한다. 읽기 편해야 한다. 간결체로 써야 한다. 한 문장이 길어서는 안된다. 주어와 서술어가 명확해야 한다. 한 문단에는 하나의 주장만 담는게 중요하다. 마치 단일 책임의.. 2021. 7. 7.
[우아한테크코스Pro] 인수 테스트 기반 TDD - 1 [5/9] 5주차 인수테스트 기반 TDD에서는 3주차에서 했던 인수테스트 주도 개발 에서 말하는 인수 테스트 이후 개발 흐름에 대해서 미션이 주어졌습니다. 이번 미션에서는 총 4단계로 구성되어 각 단계마다 많은 코드 작성이 요구되었습니다. 이번 미션 목표 테스트 주도 개발 접근 방법을 이해할 수 있습니다. 단위 테스트에 대한 이해를 높일 수 있습니다. 테스트 주도 개발을 접근하는 방법으로 크게 2가지가 있습니다. 1. Outside In 일반적으로 TDD는 Inside-Out 의 방식을 말합니다. 그러므로, Outside-In는 Top Down으로 진행하고, London School TDD라고도 부르고, Mockist Approach라고도 불린다고 합니다. 아래 그림 1 에서 보여지는 것과 같이 최상위 레이어에서 .. 2021. 7. 1.
[우아한테크코스Pro] 그럴듯한 서비스 만들기 - 2 [4/9] 이번 미션에서 했던 작업 진짜 운영하는 듯한 서비스 구성하기(with Bastion Server) 웹 애플리케이션 앞단에 Reverse Proxy 구축하기 nginx에 TLS 설정하기 진짜 운영하는 듯한 서비스 구성하기(with Bastion Server) Bastion Server 란 무엇인가? Bastion의 의미는 성 외곽을 보호하기 위해 돌출된 부분으로서 적으로부터 효과적으로 방어하기 위한 수단입니다. 서비스를 구성하는 과정에서도 보안을 한 작업으로서 Bastion Server 를 구축합니다. 이 서버에 침입 차단 소프트웨어가 설치되어 내부와 외부 네트워크 사이에서 일종의 게이트 역할을 수행하는 호스트를 뜻합니다. - 출처 펜타시큐리티시스템 EC2에서 Bastion 을 위한 EC2를 생성합니다. .. 2021. 7. 1.
[우아한테크코스Pro] 그럴듯한 서비스 만들기(network) - 1 [4/9] 이번 4주차에서는그럴듯한 서비스 만들기 라는 주제를 가지고 미션에 참여했습니다. AWS 를 활용해 네트워크를 구성하며, 네트워크 기본 개념을 학습했습니다. 위와 같은 네트워크 망을 구축하기 위해서 네트워크 지식으로, OSI 7 Layer Router, Internet gateway subnet Swich 에 대한 이해가 필요합니다. L2 Switch Multiple Access 를 위한 장비로서, 서버에는 Network Interface Card 가 있습니다. 그 Card에는 각 장비의 주소를 나타내는 MAC 주소가 담겨져있습니다. 담겨져 있는 주소를 보고, 패킷의 충돌이 일어나지 않도록 패킷의 목적지로 지정할 포트를 직접 전송합니다. 스위치에서 패킷의 목적지 주소를 기준으로 보내는 곳과 받는 곳을 계산.. 2021. 6. 17.
[우아한테크코스Pro]인수테스트 주도 개발[3/9] 인수테스트 주도 개발이란 무엇인가? 개인적인 생각으로서, 설명할 때테스트 주도 개발(TDD) 의 단점을 해소시켜주는 개발론 중 하나라고 말씀드리고 싶습니다. TDD 라는 것은 실패한 테스트케이스를 작성하고, 이를 통과시키면서 개발해나가는 방법을 말합니다. TDD 단점으로 생각해보면, 실패한 테스트라는 것을 무엇을 어디에서부터 어떻게 테스트를 해야될지? 판단하기 어렵다는 부분에 있습니다. 이런 문제를 해소시켜 주는 개발 방법론으로서 인수주도 테스트 개발 이라는 것이 나옵니다. 어떻게 이런 부분을 도와줄수 있을까요? 이부분을 학습하기 위해서 우아한테크캠프pro 에서는 3주차 과제로 인수 테스트 주도 개발을 체험해볼 수 있는 시간을 가졌습니다. 이미 어느정도 작성된 코드를 Fork 받아, 인수테스트 를 작성하.. 2021. 6. 15.
[JPA] JoinColumn vs mappedBy mappedBy 와 @JoinedColumn 에 대해서 알아보기. @Entity public class Company { ... private String name; @OneToMany(mappedBy = "company", orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List branchs = new ArrayList(); ... } @Entity public class Branch { ... private String branchName; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "companyId", foreignKey = @ForeignKey(.. 2021. 6. 13.
인터페이스 빈 주입을 사용해야 하는 이유 위 내용은 https://youtu.be/C6nsjqrCJq4 백기선님의 유튜브에서 발췌했습니다. 만약 위와 같은 에러가 발생했다라면? *************************** APPLICATION FAILED TO START *************************** Description: The bean 'defaultMyService' could not be injected as a 'com.example.demo.DefaultMyService' because it is a JDK dynamic proxy that implements: com.example.demo.MyService Action: Consider injecting the bean as one of its interf.. 2021. 6. 12.
[우아한테크코스Pro]QnA 서비스(JPA)[2/9] 이번 2주차 미션은 JPA를 학습하는 한 주였습니다. 매번 느끼는 거지만, JPA 는 학습한다고해서 아는게 아닌것 같습니다. JPA는 진짜 백문이불여일타 의 대표적인 모범예제이지 않을까 싶습니다. 작업 내역 [1단계] 엔티티 맵핑하기 create table answer ( id bigint generated by default as identity, contents clob, created_at timestamp not null, deleted boolean not null, question_id bigint, updated_at timestamp, writer_id bigint, primary key (id) ) 위와 같은 SQL 을 그대로 엔티티 만들기 @Entity @Where(clause = "d.. 2021. 6. 6.
[JPA] Collection 을 업데이트 할때, add()와 addAll() 을 조심하자. JPA 에서 Collection 을 업데이트 할 때, 다음과 같은 에러를 받았다. o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 23505, SQLState: 23505 o.h.engine.jdbc.spi.SqlExceptionHelper : Unique index or primary key violation: "PUBLIC.UK_9NEY9DAVBULF79NMN9VG6K7TN_INDEX_2 ON PUBLIC.LINE(NAME) VALUES 2"; SQL statement: update line set created_date=?, modified_date=?, color=?, name=? where id=? [23505-200] 받았던 이유는 line enti.. 2021. 6. 5.
[우아한테크코스Pro]로또 구현(테스트 주도 개발) - 못다한 이야기 이전에 로또 TDD 에 대한 내용을 블로깅한 적이 있습니다. https://happy-coding-day.tistory.com/170 들어가기 모든 구현을 마치고, PASS 까지 받은 상황에서 미쳐 생각하지 못했던 내용에 대해서 이야기해볼까 합니다. 이전 블로그에서도 말했다시피, 아래 생활 체조 원칙을 명확히 지키면서 코딩해야 합니다. 원시값도 포장한다는 말은 int 값 또한 인스턴스로 만들어 개발해야 한다는 의미입니다. 경험할 객체지향 생활 체조 원칙 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다. 규칙 2: else 예약어를 쓰지 않는다. 규칙 3: 모든 원시값과 문자열을 포장한다. 규칙 5: 줄여쓰지 않는다(축약 금지). 규칙 8: 일급 콜렉션을 쓴다. 캐싱인스턴스 클래스 중에 LottoN.. 2021. 6. 3.
[Inteliij] 대문자 - 소문자 변환 단축키 Command + Shift + u 2021. 6. 3.
[우아한테크코스Pro]로또 구현(테스트 주도 개발)[1/9] 들어가기 이번 한 주동안 우아한테크코스Pro 에서는 테스트 주도 개발로 로또를 구현하는 미션을 받았습니다. 처음에는 간단할 줄 알았던 미션도 하다보니, 생각해야 될 부분- 고민해야될 부분- 생각보다 많았습니다. 특히, 코드를 작성하면서 지켜야 할 부분으로 다음과 같습니다. 경험할 객체지향 생활 체조 원칙 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다. 규칙 2: else 예약어를 쓰지 않는다. 규칙 3: 모든 원시값과 문자열을 포장한다. 규칙 5: 줄여쓰지 않는다(축약 금지). 규칙 8: 일급 콜렉션을 쓴다. 위 규칙은 읽을 때는 간단해 보일지라도, 코드를 작성하는 과정에서 2개의 선과악이 공존하게 만드는 규칙들이였습니다. 고민을 했던 부분 1. 이름 짓기 클래스 이름을 포함해서 패키지를 설계하.. 2021. 5. 28.
Domain-Driven Design: The Identifier Type Pattern[번역] 원문 - https://medium.com/@gara.mohamed/domain-driven-design-the-identifier-type-pattern-d86fd3c128b3 Domain-Driven Design: The Identifier Type Pattern A Typescript version medium.com Introduction Entity와 ValueObject 가 다른 점은 식별자이다. Entity는 식별자를 포함 내재하고 있지만, ValueObject는 식별자가 없다. Entity의 식별자는 다음 기술들 중에 하나로 설명할 수 있다. - Primitive Type - Special type defined as a value object or an alias type 도메인 주도 설.. 2021. 5. 24.
우아한테크코스Pro 프리코스 후기 [PR 코드] https://github.com/next-step/java-baseball-precourse/pull/351 [김정규] 프리코스 미션 제출합니다. by LenKIM · Pull Request #351 · next-step/java-baseball-precourse 프리코스 미션 제출합니다. README.md 에 구현할 기능 목록 리스트를 나열하고, 각 기능 목록을 구현하기 위한 테스트 목록은 Todo.md 에 작성하여 개발했습니다. 모든 기능 개발을 마치고, 테스트 코 github.com https://github.com/next-step/java-racingcar-precourse/pull/224 [자동차 경주 게임] 김정규 미션 제출합니다. by LenKIM · Pull Request.. 2021. 5. 17.
Value Object로서 Model Identity를 사용하는 3가지 이유[번역] 원본 - https://buildplease.com/pages/vo-ids/ 3 Reasons to Model Identity as a Value Object On of the defining characteristics of an Entity is that it has identity. From the Blue Book: “Some objects are not defined primarily by their attributes. They represent a thread of identity that runs through time and often across distinct representations buildplease.com 엔티티가 가진 중요한 특성 중 하나는 Identity 를 갖는 다는 .. 2021. 5. 17.
Spring Data JDBC 가볍게 살펴보기 - 1 Spring Data JPA 마찬가지로, Spring Data 라는 Prefix 가 붙습니다. 여기서 Spring Data 란 무엇일까? 간단하게 Docs 에서 말하는 컨셉을 이해해보자. Spring Data의 핵심은 Repository 이다. 이는 ID가 되는 Type과 Domain Class가 되는 Type을 Argument로 갖는다. 이 인터페이스는 주로 작업할 Type을 캡처하고 인터페이스를 확장하는 인터페이스를 발견하는 데 도움이 되는 마커 인터페이스 역할을 합니다. - docs.spring.io/spring-data/jdbc/docs/current/reference/html/#repositories.core-concepts 아마도 Spring Data 라고 하는 것들은 Repository 가 .. 2021. 5. 9.
빠르게 실패하기(fail-fast) VS 안전하게 실패하기(fail-safe) 이 주제에 대해서 "엘레강트 오브젝트-조영호 번역" 책에서 다루고 있습니다. 이론상으로만, 이해하고 있었습니다. 그러나, 최근 사내 서비스를 트러블 슈팅하며, 다른 분의 코드를 리뷰하며 이 주제에 대해서 말할 수 있었던 기회가 있었습니다. 그러나, 역시 이론과 코드에는 거리감이 있었고, 그 상황에서 저또한 명확하게 설명하기 힘들었습니다. 저 스스로는 빠르게 실패하기 를 실천하기 위해서 코드 상에서 노력하고 있는데, 이것을 누군가에게 설명하려니 잘 안되더군요. 그래서 팀원분에게 이 부분을 설명해주면서 헀던 이야기를 공유합니다. 먼저 빠르게 실패하기와 안전하게 실패하기에 대해서 이론으로 살펴보고 난 뒤에, 코드로서 살펴보겠습니다. 이 두 가지는 적절한 상황에 잘 활용하는 것이 중요하지만-, 만약 코딩 중에 .. 2021. 4. 16.
계약에 의한 설계(Contract By Design) 더 잘 활용하기(with java) 들어가기 계약에 의한 설계(Contract By Design) 라는 용어에 대해서 조영호님의 Object 책에서 처음 접하게 되었습니다. 계약에 의해 설계가 이루어지지 않는 코드에서 발생하는 문제점을 운영중인 프로덕트 코드에서 쉽게 발견할 수 있었고, 이를 계기로 사내에 '계약에 의한 설계' 라는 이름으로 세미나까지 하게 되었습니다. 발표자료 그러나, 발표를 하면서도 '실제 동작되는 코드에서는 어떻게 '계약에 의한 설계' 를 지킬 수 있을까?' 라는 생각을 했습니다. 실제로 계약에 의한 설계(Contract By Design) 를 준수하기 위해서 구글이 만든 cofoja 라는 라이브러리도 있고, vanilla4j 라는 라이브러리도 있었습니다. 하지만 이 두 개의 라이브러리를 적극적으로 활용하지 못한 이유.. 2021. 4. 5.
Mock 객체란 무엇일까? 왜 써야될까? 아래 내용은 위 책에서 말하는 4장 TDD with Mock 에서 내용을 발췌했습니다. TDD를 공부하면서 Mock 이라는 용어는 너무나도 많이 나오고, 실제로 테스트 프레임워크를 사용하면 Mock 객체를 많이 사용되게 된다. 그놈의 Mock! Mock 객체를 사용해서, 테스트를 용이하게 만들수 있고, 아직 만들어지지 않은 개념을 활용해 내가 만들고자 하는 객체를 구체화시킬 수 있는 도구라는 사실은 알았다. 그러나 문제점은 여기에 있었다. 주로 Mockito 프레임워크를 사용하는데, 각 Mock 객체가 어떤 역할을 하는지 이해하기 어려웠다. 더하여, 어떻게 활용해야 하는지도, 이해하기 어려웠다. 이번 장에서는 다시한번 Mock을 써야하는 이유, 그리고 Mock 객체가 어떤 역할을 하는지, 마지막으로 어떻.. 2021. 3. 11.
TDD 좀 더 잘하기 아래 내용은 고품질 쾌속개발을 위한 TDD 3장 내용을 발췌했습니다. TDD의 한계 이번 장에서는 TDD의 한계 라는 주제로 내용만 다룰까 합니다. 동시성 문제 동시성이 필요한 테스트케이스의 경우, 작성하는데는 문제가 어렵지 않다. 그러나, 테스트 자체를 무결하게 유지하기가 매우 어렵다. 상식적으로 파악하기 어려운 불규칙한 문제가 적지 않게 발생하기 때문이다. 현재 유일한 해결책을 제시하기는 어렵지만 다양한 방식으로 해결한다 그러나 여전히 명확하게 테스트할 수 있는 것은 없는 것 같다. 접근제어자(private/protected 메서드) 테스트할 항목의 접근 제한에 대한 논의. private으로 되어 있는 메소드는 일반적인 방법으로는 테스트가 불가능하다. 그러나, private으로 되어 있어서 접근이 어.. 2021. 3. 11.