본문 바로가기
728x90

분류 전체보기35

역행자 - 자청 이 책 에서는 사람을 크게 순리자와 역행자 두가지로 나눈다. 타고난 운명 그대로 살아가는 사람(95퍼센트)인 순리자와 능력으로 인생의 자유를 얻고, 경제적 자유를 누리는 역행자 (5퍼센트) 의 역행자로 나뉜다. 책에서는 닭장속 닭처럼 사료나 먹으며 주어진 운명으로 살지 말고 능력을 얻고 역행자로 자유를 찾으라고 이야기 한다. 그리고 역행자를 찾기 위한 방법을 소개 한다. 자의식 해제 간단하게 이야기 하면 부정적으로 인식하는 것을 긍정적인 요소로 전환하는 것을 이야기한다. 크게 탐색, 인정, 전환 3가지 절차가 있다. 먼저 자의식으로 인해 부정적인 요소를 발견하고 인정하고 긍정적인 요소로 전환한다. 나같은 경우는 이미 오른 주식 차트를 보면서 이미 올라버렸으니 어쩔 수 없고 아에 그 주식 자체를 보지 않는.. 2023. 7. 29.
2022년 회고록 (도약을 위한 준비) 1월 교육: 우아한테크캠프 Pro 3기 수료 지난해 프리랜서를 그만두고 일반 사용자용 서비스 회사로 이직하고 싶은 찰나에 "우아한테크캠프 Pro" 라는 온라인 교육을 보게 되었고 지원했다. 이 교육은 특이하게 수강하기 위해선 서류 접수 부터 프리코스 기간에 2개의 과제 를 제출해야한다. 내 생각에는 서류 제출은 일단 길게쓰면 되는 것 같고 2개의 과제도 일단 최선을 다하면 합격 할 수 있는 수준이였던 것 같다. 코로나 때문에 오프라인 수업은 아쉬웠다. 교육이 시작되면 11월 부터 주 마다 8개의 미션을 전부 통과해야 "우수 수료"가 가능했다. 미션 안에도 2~4개 정도 서브미션이 있어서 실제로 미션의 수는 20개가 넘었을 것이다. 그래서 그런지 교육 시작전 부터 미션 제출을 한다는 다른 수강생들의 알림들.. 2023. 1. 10.
OptimisticLocking 을 이용한 최대인원 예약 동시성 처리하기 안녕하세요. 오늘은 아래의 요구사항을 OptimisticLocking 을 활용하여 해결해보겠습니다. 요구사항 진료에 대해서 하루에 최대 인원 까지 진료 예약을 할 수 있다. 주의사항: 남은 예약 인원이 1자리 일 경우 여러명이 동시에 예약을 신청할 경우에는 가장 빠른 한명만 예약 되어야 합니다. 잘못해서 최대 인원보다 많이 예약될 경우가 없어야겠죠 ! 가장 간단하게 해결하는 방법은 예약하는 기능을 담당하는 스레드를 직렬화 하는 synchronized 키워드를 활용하는 방법도 있습니다. 하지만 deadlock 이 발생할 수 있어 좋은 해결방안은 아닙니다. deadlock 은 ReentrantLock 을 활용하여 해결할 수 있지만 또 다른 문제점이 있습니다. 만약 다중 서버에서 분산해서 예약을 담당한다면 각.. 2022. 4. 23.
브레이킹 루틴 - 천인우 책을 읽게 된 계기 우연히 유튜브에서 천인우와 심사임당이 "성공하는 사람들의 3가지 특징" 에 대해서 다루는 영상을 보았다. 아래와 같은 3가지 특징은 공감이 되었고 좋은 영감을 받았다. 1. 피드백으로 부터 상처를 받지 않고 좋은 의도로 받아 들인다. (Assume good intentions) 2. 상대방이 설명을 이해하지 못한다면 설명을 못한 나의 잘못이다. 3. 스케줄 관리를 주체적으로 한다. 따라서 해당 내용을 더 구체적으로 다루는 "브레이킹 루틴 - 천인우" 이라는 책을 읽어보기로 결심하였다. 감명깊은 내용 먼저 나에게 집중하고 원하고자 하는 것(삶)을 목표로 삼을 것 목표를 위해 할 일 을 3가지 정도로 작게 가져갈 것. 지속적으로 성공적으로 할 일을 해내는 작은 습관으로 만들 것. 작은 습.. 2022. 1. 26.
프로덕트 오너(PO) 스터디 경험 동기 비사이드를 통해서 사이드 프로젝트인 '빵긋' 을 진행하던 중 비사이드 플랫폼에서 주어진 스케쥴, 주어진 역할로 충분하지 않은 점을 깨달았다. 사실 서로간에 R&R 이나 프로덕트에 대한 생각을 깊게 나눠보기도 전에 오직 "출시"만을 향해서 달렸던 부분들이 있었고 달리던 과정에서 서로 알아줬으면 하는 일들이나 오해들도 있어서 이번 기회에 우리가 무엇을 만들고 있는지 전체적인 흐름을 시야를 더 넓혀서 확인해 볼 필요가 있었다. 그리하여 좀 더 베스트 팀이되기 위해서 팀원들에게 PO 스터디를 제안하게 되었고 개발파트 분들은 흔쾌히 수락하였다. 근데, 개발파트 분들만 흔쾌히 수락하였다 ! 하지만 지속적으로 스터디에 대한 이야기와 영감이 다른 파트 분들도 들으면 좋을 내용임을 어필하여 2주차 부터는 기획파트 .. 2021. 12. 12.
2021년 14주간 비사이드 6기(빵긋) 경험 셀프 QNA 1탄 1. 비사이드는 무엇인가요? 비사이드(B-Side)는 · 기획자, 디자이너, 개발자가 · 한 팀으로 프로젝트를 진행하고 · 스스로 성장하는 사이드 프로젝트 플랫폼이에요.> 저는 6기로 참가 했고, 끝빵왕들 이라는 팀이욧. 자세한 내용은 아래 링크를 참고해주세요. 비사이드 6기 비사이드 6기 www.bside.best 2. 비사이드를 시작하신 이유가 무엇인가요? 물론 개발자로서 성장하는 것도 있지만, 사이드 프로젝트에서 살짝 낯설기도 한 새로운 사람들과 한 팀이 되면서 아무런 문화가 없는 곳에서 문화를 만들어 가면서 '나는 어떤 개발자이고, 나에게 맞는 문화는 어떤 것인지' 탐구하고 되돌아보는 경험을 하고 싶어서 사이드 프로젝트를 시작했죠. 3. 비사이드 기간 동안 어떤 프로덕트를 만들었나요? 저희 개발 .. 2021. 8. 22.
[DDD] 간접 참조 (feat. JPA) 도메인 주도 설계를 공부하다 보면 아래의 예시 이미지 처럼 도메인을 기준으로에그리거트 단위로 그룹핑을 하게 된다. 애그리거트는 관련 도메인을 하나의 군집으로 묶은 것 위의 이미지는 회원과 빵집의 관계 (회원이 빵집을 등록하는 관계) 를 나타낸 것 이다. 이 글에서는 회원 에그리거트와 빵집 에거리거트의 관계. 즉, "에그리거트와 다른 에그리거트의 관계" 에 대한 내용을 적어보겠다. DDD 에서는 에그리거트간에 참조 방식은 직접 참조 방식 보다 간접 참조하는 방식을 권장한다. 용어 사전 Bakery: 빵집 에그리거트 User: 회원 에그리거트 각각의 두 참조 방식을 예시를 들어서 설명 해보겠다. 1. 직접 참조 JPA 에서 직접 참조는 Entity 클래스를 설계할 때 @OneToOne, @OneToMany.. 2021. 7. 11.
[white-ship] 자바 스터디 후기 오늘은 자바 스터디 후기를 작성해보려고 한다. 매번 작성해야지 라는 생각을 하고 있었는데 막상 블로그 글쓰기 버튼을 누르는 건 지금 출근하기 40분 전이다. 이번 스터디는 자기 주도 학습 같은 느낌이 났다. 매주 선장님이 학습 목표를 정해주면 벌 때 처럼 달려들어 자기의 재량 껏 깊게 또는 넓게 학습하여 블로그나 메모장에 정리하여 링크를 제출하는 방식이다. 제출된 몇몇 링크들은 선장님이 확인해 라이브 방송에서 다룬다. 매주 7일이라는 시간이 있었지만 제출 하기 직전 금요일, 토요일에 스터디를 시작했고, 생각보다 다루는 내용이 어려워서 밤을 새운 적도 마감 가까스로 제출한 적도 있었다. 아쉬웠던 점은 다뤘던 주제에 대해서 이야기를 한다면 아직 정확히 안다고 할 수 없다. 좋았던 점은 정확히 안다고 할 순 .. 2021. 4. 13.
15주차 과제: 람다식 목표 자바의 람다식에 대해 학습하세요. 학습할 것 (필수) 람다식 사용법 함수형 인터페이스 Variable Capture 메소드, 생성자 레퍼런스 람다란 무엇일까? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다 표현식에는 이름은 없지만 파라미터 리스트, 바디, 반환형식, 발생할 수 있는 예외 리스트는 가질 수 있다. 익명 보통의 메서드와 달리 이름이 없으므로 익명 이라 표현한다. 구현해야 할 코드에 대한 걱정거리가 줄어든다. 함수 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 받, 반환 형식, 가능한 예외 리스트를 포함한다. 전달 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성 익명.. 2021. 3. 14.
14주차 과제: 제네릭 목표 자바의 제네릭에 대해 학습하세요. 학습할 것 (필수) 제네릭 사용법 제네릭 주요 개념 (바운디드 타입, 와일드 카드) 제네릭 메소드 만들기 Erasure 제네릭 등장 이전의 자바 코드가 갖는 불편함과 문제점 제네릭이 갖는 의미는 '일반화'이다. 그리고 자바에서 그 일반화의 대상은 자료형이다. 그럼 제네릭이 존재하지 않던 시절의 코드와 제네릭이 존재하는 시절의 코드 비교에서부터 이야기를 시작하겠다. 제네릭 이전의 코드 사과와 오렌지를 담는 상자를 담는 상자를 각각 생성하여 그상자에 사과와 오렌지를 담았다가 꺼내는 과정을 보이는 다음 예제를 관찰하자. public class FruitAndBox { public static void main(String[] args) { AppleBox aBox = n.. 2021. 2. 27.
13주차 과제: I/O 목표 자바의 Input과 Ontput에 대해 학습하세요. 학습할 것 (필수) 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 1. 스트림 (Stream) / 버퍼 (Buffer) / 채널 (channel) 기반의 I/O IO (Input Output) 입출력 컴퓨터는 입출력 (IO) 포트라고도 하는 하나 이상의 통신 인터페이스를 통해 외부와 통신한다. 스트림 통신을 균일하게 처리하기 위해 자바에서는 스트림 개념을 사용. 스트림은 한 엔티티가 소스이고 다른 엔티티가 대상이라는 조건을 가진 두 .. 2021. 2. 20.
12주차 과제: 애노테이션 목표 자바의 애노테이션에 대해 학습하세요. 학습할 것 (필수) 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 Annotation 읽는 것 부터 햇갈린다. 어노테이션?, 애노테이션?. 애너테이션?, 어너테이션?, 언노테이션?, 아노타션 이 중에 원래발음 애녀 테이션 이다. 애노테이션 주석이라는 기능은 가지고 있지 않지만 뜻을 가지고 있으면서 메타데이터(징표, 마크)를 가지고 있다.. (ex. @Controller, @Deprecated...) 애노테이션 정의 Target 과 Retention 그리고 @interface 를 사용해서 정의는 다음과 같이 할 수 있다. @Target({ElementType.TYPE}) @Retention(RetentionPo.. 2021. 2. 6.
11주차 과제: Enum 목표 자바의 열거형에 대해 학습하세요. 학습할 것 (필수) enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet enum 정의하는 방법 enum은 enum : 열거형이라고 불리며, 서로 연관된 상수들의 집합이라고 불린다. 예를들어 어떤 상태의 값들을 상수로 관리할 때 Enum 으로 관리하면 좋다. private String state; // 제출 전 = "wait" , 제출 후 = "completed" 다음과 같이 문자열로 상태값을 정의해놓으면 제출 전을 표시 할때 wait을 알기가 어렵다. 또는 대문자로 했는지 소문자로 했는지 앞글자만 대문자인지 헷갈릴 가능성이 높다. 따라서 이것은 변하지 않는 상수값으로 상태값들을 정의 해놓.. 2021. 1. 30.
10주차 과제: 멀티쓰레드 프로그래밍 목표 자바의 멀티쓰레드 프로그래밍에 대해 학습하세요. 학습할 것 (필수) Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 쓰레드 쓰레드는 실행 중인 프로그램 내에서 '또 다른 실행의 흐름을 형성하는 주체'를 의미한다. 예를 들어서 다음과 같이 프로그램을 실행하면 가상머신은 하나의 쓰레드를 생성해서 main 메소드의 실행을 담당하게 한다. public class CurrentThreadName { public static void main(String[] args) { Thread ct = Thread.currentThread(); String name = ct.getName(); // 쓰레드의 이름 변환 System.out.println(na.. 2021. 1. 23.
9주차 과제: 예외 처리 목표 자바의 예외 처리에 대해 학습하세요. 학습할 것 (필수) 자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 자바가 제공하는 예외 계층 구조 Exception과 Error의 차이는? RuntimeException과 RE가 아닌 것의 차이는? 커스텀한 예외 만드는 방법 자바가 제공하는 예외 계층 구조 예외(Exception)와 에러(Error) 비슷한 말 같지만 차이점이 있다. 에러는 그림에서 보이는 것 과 같이 ThreadDeath 쓰레드가 죽어버렸다거나 VirtualMachineError JVM이 작동을 안한다거나 개발자가 만든 코드 안에서 오작동이 난 것이 아닌 그 밖에 영역에 문제이다. 따라서 대비할 수 있는 방법이 많지 않다. 예외는 발생하더라도 개발자.. 2021. 1. 16.
8주자 과제: 인터페이스 목표 자바의 인터페이스에 대해 학습하세요. 학습할 것 (필수) 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스 위키백과에서 인터페이스는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 자바 라는 객체지향 언어에서는 상속을 통한 다형성은 조상클래스의 프로퍼티와 기능을 확장 시킨 것이라면, 인터페이스의 다형성은 두 시스템 에서 상호작용 할 수 있는 접점부분에서 규약을 만듬으로써 보다 다양한 상호작용을 하는 것이다. 자바에서는 이런 규.. 2021. 1. 8.
1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. 목표 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기. 학습할 것 JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JVM 구성 요소 JDK와 JRE의 차이 1. JVM이란 무엇인가 프로그래밍 언어는 OS에 따른 제약을 받을 수 있다. 쉽게 예를 들면, IOS - Swift 를 들 수 있다. 하지만 JVM(Java Virtual Machine) 의 대표적인 특징은 java 확장자 파일, 프로그래밍 언어를 OS에 제약에서 해방 시켜 준다. ​ ​ 2. 컴파일 하는 방법 먼저, 컴파일이란 OS 가 읽을 수 있는 바이너리(binary) 코드로 만드는 것이다. javac (Java Compiler)를 통해서 Java 언어를 즉 .. 2021. 1. 2.
2주차 과제: 자바 데이터 타입, 변수 그리고 배열 목표 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. 학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언 및 초기화하는 방법 변수의 스코프와 라이프타임 타입 변환, 캐스팅 그리고 타입 프로모션 1차 및 2차 배열 선언하기 타입 추론, var 1. 프리미티브 타입과 레퍼런스 타입 프로그래밍 언어에서 사용되는 데이터들은 타입을 통해서 어떤 데이터 종류인지를 알 수 있다. 크게 메모리에 직접 데이터를 가지고 있는 프리미티브 타입(int, float, boolean 등이 이에 속한다.)과 데이터를 가지고 있는 곳을 가르키는 주소를 가지고 있는 레퍼런스 타입(클래스, 인터페이스, 배열, 열거 타입이 이에 속한다.)으로 나뉜다. ​ .. 2021. 1. 2.
3주차 과제: 연산자 목표 자바가 제공하는 다양한 연산자를 학습하세요. 학습할 것 산술 연산자 비트 연산자 관계 연산자 논리 연산자 instanceof assignment(=) operator 화살표(->) 연산자 3항 연산자 연산자 우선 순위 (optional) Java 13. switch 연산자 마감일시 2020년 11월 28일 오후 3시까지. 0. 연산관련 용어 연산: 수나 식을 일정한 규칙에 따라 계산하는 것이다. 연산자: 연산을 수행하는 기호 피연산자: 연산에 참여하는 변수나 상수 1. 자바 연산자와 연산자 우선 순위 연산기호 결합 방향 우선순위 [ ], . -> 1 expr++, expr-- 5 , >>> -> 6 , =, instanceof -> 7 ==, != -> 8 & -> 9 ^ -> 10 ! -> 11 .. 2021. 1. 2.
4주차 과제: 제어문 목표 자바가 제공하는 제어문을 학습하세요. *제어문: 실행 순서를 변경시키거나 또는 조건에 따라 실행해야 할 명령문을 제어하는 데 사용하는 명령문. 학습할 것 (필수) 선택문 반복문 1. 선택문 if else 우리가 어떤 데이터를 상황에 따라서 선택해서 각각 다른 실행을 해야 할 상황이 올 수 있다. 그때 if 문을 주로 사용한다. // 최초의 조건 if (조건) { 실행문 } // if 의 또다른 조건 else if (조건) { 실행문 } // if의 나머지 상황 else { 실행문 } 예를 들어, 남자이고 20살이 넘으면 소주를 보내주고 남자이고 20살 보다 적고 12살 보다 많으면 우유를 보내주고 그리고 남자가 아닐경우에는 콜라를 보내주는 코드를 짜보면 다음과 같이 코드를 만들 수 있다. Perso.. 2021. 1. 2.
728x90