본문 바로가기

분류 전체보기

(99)
우테캠프로 준비하기 우아한테크캠프Pro의 존재는 알고 있었지만 본격적으로 관심을 갖게 된 계기는 우아한Tech 유튜브 채널에서 설명회를 진행할 때 라이브 방송을 챙겨 보았고 나에게 필요한 교육 과정이라는 생각을 하게 되었습니다. 제공되는 커리큘럼이 백엔드 개발자로서 중요하지만, 스스로 학습하는 데에 어려움이 있거나 회사에서 경험해 보지 못한 내용들이 포함되어 있었기 때문입니다. 최근 몸이 안 좋았지만, 주어진 상황에서 최선을 다해 지원서를 작성했고, 프리코스를 포기하지 않고 열심히 진행했습니다. 운이 좋게 합격을 해서 설레는 마음으로 지내고 있습니다. 강의를 본격적으로 시작하기 전에 과정을 슬기롭게 소화하는 방법이라는 파트가 있습니다. 여기서 스스로에게 가장 필요한 부분은 환경 통제에 관한 이야기였고, 나만의 규칙을 만들어..
우아한 유스방 3기 OT 나의 위치가 어디인지 파악하는 게 좋다. 학습태도 -> 클린코드, 단위 테스트 -> 웹 기술과 웹 프로그래밍 -> 스프링 프레임워크 -> 데이터베이스 -> ORM 프레임워크 ->... -> CI/CD를 위한 인프라스트럭처 -> 클린 아키텍처 -> DDD -> 분산 시스템 -> 인프라스트럭처 -> MSA ->... 학습태도에서 중요한 점은 책을 읽을 때 목차부터 꼭 읽어야 한다던지 하는 부분을 버리는 것이 좋다. 좋은 소프트웨어 생태계를 만들어 가는 데에 공헌해야 한다. 적어도 하루에 한 번씩은 다른 사람의 질문에 답변을 한다. 학습 TIP 내가 필요한 기능이 없을 때 포기하지 말고 직접 만들어야 한다. 새로운 API를 학습할 땐 코드를 직접 작성해보고 인사이트를 얻어야 한다. 코딩 테스트 준비할 때 30..
3월 유쾌한 수다 타임 후기 유쾌한 수다 타임 이란? 유쾌한 수다 타임은 선배 개발자를 초대해 프로그래머의 삶과 커리어 패스 등에 관한 이야기를 나누는 시간입니다. 수다 타임은 SLiPP 게더에서 진행되며 행사의 준비와 진행은 박재성(제이슨)님이 해주셨습니다. 3월의 발표자 3월의 발표자는 우테코의 교장 선생님으로 잘 알려진 자바지기 박재성님이 였습니다. 개인적으로 재성님의 교육을 직접 듣거나 대화를 해본 적은 없지만 간접적으로 좋은 영향을 많이 받아 기대되는 시간이었습니다. 질문 & 답변 요즘 가장 큰 고민은 무엇인가요? 우아한 테크 코스의 허들을 낮춰 더 많은 사람들이 참여할 수 있는 교육기관을 만드는 방법을 고민하고 있습니다. 개발자의 수명이 10년 정도라고 들었습니다. 연차가 쌓이면 꼭 매니저가 되어야 하나요? 분야마다 다르..
2022/03/07 TIL Java8 Default Method 자바8 부터는 인터페이스에 default 메소드(구현이 있는 메소드)를 사용할 수 있다. 다양한 사용방법이 있겠지만 '원하는 메소드만 구현'하고 싶을 때 사용할 수 있다는 것을 알게 되었다. Spring에 WebMvcConfigurer interface가 있는데 자바7 까지는 default 메소드가 없기 때문에 WebMvcConfiguereAdapter라는 추상 클래스를 사용하여 원하는 메소드를 재정의 했었다. 하지만 자바8이 나오면서 WebMvcConfiguereAdapter는 Deprecated 되었고 WebMvcConfigurer를 바로 구현하게 되었다. 토비의 스프링 3.1 오브젝트의 설계와 구현, 동작원리에 더 집중하기를 바란다. 그러다 보면 ..
2022/03/03 TIL 자바 병렬 프로그래밍 경쟁 조건은? 여러 스레드를 교차해서 실행하는 상황에 따라 계산의 정확성이 달라질 때 나타난다. 정수형 변수값을 여러 스레드가 접근하여 변경하는 경우를 생각해보면 될 것 같다. 경쟁 조건이란 용어를 만들 정도로 중요한 개념이란 것을 알고 넘어가야겠다. 점검 후 행동이란? 잠재적으로 유효하지 않은 관찰 결과로 결정을 내리거나 계산을 하는 것 점검 후 행동의 예시로는 늦은 초기화(lazy initialization)가 있다. public class LazyInitRace { private Person instance = null; public Person getInstance(){ if (instance == null){ instance = new Person(); } return in..
2022/03/02 TIL 자바 병렬 프로그래밍 모든 자바 프로그램은 기본적으로 스레드를 사용한다. JVM을 시작시키면 main 메소드를 실행할 주 스레드 뿐 아니라 가비지 컬렉션이나 객체 종료와 같은 내부 작업을 담당할 스레드도 생성한다. JAVA가 동작하는 원리를 알기 위해서는 병렬 처리에 대한 이해가 더 높아야 한다는 생각을 했다. 병렬 프로그램은 단순하게 스레드와 락만 신경 써서 될 일은 아니다. 하지만 스레드와 락은 그저 목적을 위한 도구일 뿐이다. 근본적으로 공유되고 변경할 수 있는 상태에 대한 접근을 관리하는 것이다. 병렬 처리하면 JAVA에서는 자연스럽게 '스레드'와 '락(lock)' 같은 단어들이 떠오르기 마련이다. 이번 기회에 도구가 아닌 본질에 대해 고민해보고 싶다. 스레드 안전한 ..
2022/02/28 TIL 무어의 법칙 반도체 집접 회로의 성능이 24개월마다 2배로 증가하는 법칙이다. 인텔의 공동 설립자인 고든 무어가 1965년에 내놓은 것이다. "법칙"이라는 말은 캘리포니아 공과대학의 교수와 사업가에 따른 것이다. 반도체 메모리칩의 성능 즉, 메모리의 용량이나 CPU의 속도가 18개월에서 24개월마다 2배씩 향상된다는 '기술 개발 속도에 관한 법칙'이다. 컴퓨팅 성능은 18개월마다 2배씩 향상된다. 컴퓨터 가격은 18개월마다 반으로 떨어진다. 현재는 사실상 무어의 법칙이 의미가 없다. 참고 암달의 법칙 진 암달이라는 컴퓨터 과학자이자 기업가의 이름에서 따왔다. 컴퓨터의 개수가 아무리 늘어나더라도 속도의 한계는 정해져있기 때문에 암달의 법칙은 암달의 저주로도 불리며 컴퓨터 시스템의 일부를 개선..
2022/02/24 TIL 클린 아키텍처 27장 : '크고 작은 모든' 서비스들 자바의 경우, 서비스를 하나 이상의 jar 파일에 포함되는 추상 클래스들의 집합이라고 생각하라. 이런 관점에서 하나의 서비스는 인터페이스로 만들어지는 게 좋다고 생각한다. 클린 아키텍처 28장 : 테스트 경계 시스템 내부의 어떤 것도 테스트에는 의존하지 않으며 항상 원의 안쪽으로 의존한다. 테스트뿐만 아니라 의존성이 높아지면 변경하기 어려운 코드가 된다. 특히 테스트는 운영이 아닌 개발을 지원하는 데에 있기 때문에 의존성이 낮아야 한다. 소프트웨어 설계의 첫 번째 규칙은 언제나 같다. '변동성이 있는 것에 의존하지 말라' 의존성이 높아질수록 테스트하기 힘들어 지고 그 이유 중 변동성이 높아지는 것도 하나이다. 이를 줄이기 ..
2022/02/23 TIL 클린 아키텍처 26장 : 메인 컴포넌트 메인은 모든 팩토리와 전략, 그리고 시스템 전반을 담당하는 나머지 기반설비를 생성한 후, 시스템에서 더 높은 수준을 담당하는 부분으로 제어권을 넘기는 역할을 맡는다. 스프링에서 main이 실행되면 Bean을 등록하는(메모리에 올리는) 과정이 생각났다. 메인은 클린 아키텍처에서 가장 바깥 원에 위치하는 지저분한 저수준 모듈이라는 점이다. 고수준의 모듈(주로 개발자가 작성하는 변경이 많은 모듈)이 수정되어도 main을 수정할 필요가 없어진다.
2022/02/22 TIL 클린 아키텍처 25장 이 예제를 가져온 이유는 아키텍처 경계가 어디에나 존재한다는 사실을 보여주기 위함이다. 25장에서는 간단한 게임을 만드는데 여러 개의 경계를 도출하는 예시를 보여준다. 이 부분에서 Service와 SerivceImpl를 만드는 관습적인 행위 역시 경계를 만든 것이 맞을까 라는 생각을 했다. 또한 DAO를 제외하고 추가적인 경계를 만드는 데에 내가 소극적이라는 것을 알게 되었다. YAGNI(you aren't going to need it) 오버 엔지니어링이 언더 엔지니어링 보다 나쁠 때가 훨씬 많다. 아키텍처 관점에서는 스스로 그림이 확실히 그려지고 수정하는 게 좋다는 것 같다. 경계가 존재하지 않는 상황에서 경계가 필요하다는 사실을 발견하면 비용이 많이 들고 위험을 감수해야 한다...