일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- git
- 우아한 테크코스
- 깃허브
- Python
- VCS
- 개발자
- django
- 우테코
- 버전관리
- 깃
- 기술면접
- github
- 자바
- 우테코 프리코스
- 배달의 민족
- 프로그래머스
- Jackson
- 스프링
- 파이썬
- 패스트캠퍼스
- 코딩테스트
- rebase
- 프로그래밍
- Programming
- 기술블로그
- utterances
- multi-thread
- 우아한 형제들
- 코딩
- Spring Framework
- Today
- Total
목록전체 글 (13)
아둥바둥 개발일기
1. JPA, 하이버네이트 엔티티가 영속성 컨텍스트에 관리되면 1차 캐시부터 변경 감지까지 얻을 수 있는 혜택이 많다. 하지만 영속성 컨텍스트는 변경 감지를 위해서 스냅샷 인스턴스를 보관하므로 더 많은 메모리를 사용하는 단점이 존재한다. flush 호출하지 않음 dirty checking(변경 감지)하지 않음 readOnly=true 옵션을 주면 스프링 프레임워크가 하이버네이트 세션 플러시 모드를 MANUAL로 설정한다. 이렇게 하면 강제로 플러시를 호출하지 않는 한 플러시가 일어나지 않는다. 따라서 트랜잭션을 커밋하더라도 영속성 컨텍스트가 플러시 되지 않아서 엔티티의 등록, 수정, 삭제가 동작하지 않는다. flush 할 때 일어나는 스냅샷 비교와 같은 무거운 로직을 수행하지 않으므로 성능이 향상된다. ..
스프링에서 @Transactional은 AOP로 구현한다. 스프링의 프록시 매커니즘에는 두 가지 - JDK Dynamic Proxy, CGLIB Proxy 가 있다. 스프링부트에서는 CGLIB Proxy가 default로 사용된다. JDK Dynamic Proxy 인터페이스에 대한 Proxy만을 지원, 클래스에 대한 Proxy를 지원할 수 없다. Target 클래스에 Proxy를 적용할 때 PointCut을 통해 Advice되는 메서드를 지정한다. JDK Proxy를 사용하면 Target 클래스에 대한 모든 메서드 호출(PointCut으로 지정하지 않은 메서드도)이 일단 JVM에 Intercept된다(이 때 reflection이 사용된다). 그 후에 메서드의 Advice 적용 여부를 판단하게 된다. 이는..
우아한테크코스의 마지막 글쓰기 미션으로 "내가 꿈꾸는 프로그래머로서의 삶"을 주제로 쓴 글입니다. 열린 마음을 가진 우아한테크코스는 피드백을 매우 강조합니다. 레벨1, 2에서는 미션을 통해 리뷰어에게 피드백을 받고 점진적으로, 반복적으로 미션을 개선해 나갔어요. 레벨4에서는 크루끼리 서로 리뷰어의 역할을 하면서 피드백을 주고 받았죠. 미션뿐 아니라 다양한 곳에서 우리는 피드백을 주고 받았어요. 피드백이 자연스러운 이런 환경에서 공부를 하다보니 제 커뮤니케이션 태도가 많이 바뀐걸 알게 되었어요. 이 곳에 오기 전에는 누군가와 토론을 할 때, 아니면 대화를 할 때 항상 방어적이었어요. 상대를 이기려하고, 내 의견이 옳다는걸 증명하려고 했죠. 그것만이 유일한 토론의 방법인줄 알았죠. 하지만 이 곳에서 코치, ..
Jackson은 java의 json 프로세싱 라이브러리로 유명하다. Jackson에는 ObjectMapper 클래스가 있는데 POJO(Plain Old Java Object)를 JSON으로 변환하거나, 반대로 JSON을 POJO로 변환한다. 우아한테크코스에서 간단한 MVC프레임워크를 구현하는 미션을 진행하던중 ObjectMapper를 사용하게 되었다. 나는 ObjectMapper를 싱글턴 객체로 만들어 재사용해도 될지 고민이 생겼다. 내가 만드는 프레임워크는 멀티 쓰레드로 동작하기 때문에 Thread-safe한지가 중요했다. ObjectMapper는 Thread-safe 한가? 일단 ObjectMapper 인스턴스는 불변 객체가 아니다. 공식문서에 따르면 ObjectMapper는 ObjectReader,..
def solution(phone_book): phone_book_set = set(phone_book) for phone_number in phone_book: for i in range(1, len(phone_number)+1): prefix = phone_number[:i] if prefix in phone_book_set and prefix != phone_number: return False return True
def solution(s): answer = len(s) for unit in range(1, len(s)): result = '' count = 1 for i in range(0, len(s), unit): pivot = s[i: i + unit] next_pivot = s[i + unit:i + unit + unit] if pivot == next_pivot: count += 1 continue if 1 < count: result += str(count) result += pivot count = 1 if len(result) < answer: answer = len(result) return answer
우아한테크코스에 합격하고 과정이 시작하기까지 한달이란 시간이 남았다. 2월 2일에 시작하니 1월 한달은 온전히 자유시간이다. 우테코를 준비하며 한달 동안 달성할 TODO 리스트를 적어보았다. 항상 시작만 하고 마무리를 못 짓는 이 놈의 TODO... 2021년 첫 계획이기도 하니 이번엔 잘 지키고 싶다. TO DO CS 공부 - 자료구조/운영체제/데이터베이스/웹 스프링 책 실습 (스프링 부트와 AWS로 혼자 구현하는 웹 서비스) 독서 3권 - 가볍게 끝까지 1회 독 (클린 코드, 객체지향의 사실과 오해, 이펙티브 자바3) 타자 연습 시간표 정해놓고 루틴 만들어서 규칙적인 생활하기 일주일 중 하루는 꼭 쉬기 - 노트북 X, 책은 허용 CS 공부 아무래도 비전공자이고 그 동안 CS를 제대로 배우진 못해서 항..
우아한테크코스에 최종 합격했다. 원래 이 글은 최종 코테 후 합격 여부 메일을 기다리며 프리코스를 회고하려고 했는데 크리스마스도 있었고 CS 공부도 하면서 이것저것 핑계를 대며 미뤘는데 합격 메일을 받아 버렸다... 그래서 그냥 프리코스 회고부터 합격까지 한번에 포스팅 해버려야겠다. 우아한 테크 코스란? 우아한 테크 코스는 배달의 민족을 서비스하는 우아한 형제들에서 진행하는 프로그래머 양성 교육이다. 10개월 과정이며 교육비는 없고 2020년 3기 부터는 웹 백엔드, 프론트엔드 두 가지 과정이 진행되고 있다. 우테코 소개 영상 계기 사실 이 과정에 대해서 처음 알게 된건 작년 초였다. 검색을 하다 우연히 우아한테크코스 교육생들의 발표 동영상을 보게 되었는데 열정 넘치는 발표자와 화목한 발표 분위기가 인상..
3주차 과제 회고 새로 알게 된것 객체에 메시지를 보내는 법 비즈니스 로직과 UI 로직을 분리하라 동작하게 만들고, 제대로 만들고, 빠르게 만든다 enum의 다양한 활용법 아쉬웠던 점 중복 코드가 많은 것 살아있는 문서를 만들지 못한 것 객체지향적이지 못한 설계 테스트 코드를 제대로 작성하지 못한 것 객체에 메시지를 보내라 "메시지를 보낸다"라는 개념이 처음엔 생소했습니다. 그 의미를 곰곰히 생각해보았고 제가 그 동안 객체를 객체스럽게 사용하지 못하고 데이터 덩어리처럼 사용하는 경우가 많았다는 걸 깨달았습니다. 덕분에 정보만 담고 있는 데이터 덩어리가 아닌 역할과 책임을 가지고 있는 객체를 만들 수 있게 되었습니다. 비지니스 로직과 UI 로직을 분리하라 그 동안 하나의 도메인에 관련된 역할은 모두 모아놓..
우리는 깃을 쓰면서 브랜치를 나누어 안전하게 작업하고 완성된 작업을 다시 원래의 브랜치로 합쳐서 작업을 업데이트 한다. 깃에는 브랜치를 합치는 방법이 두 가지, Merge와 Rebase가 있지만 깃을 처음 접하는 초심자들은 브랜치를 합칠 때 Merge만을 사용한다. 두 방법의 차이점을 알아보자. 합치는 명령어는 Merge와 Rebase이지만 실제 사용할 때에는 따로 사용하는게 아니다. Merge만 사용하기 Rebase 후, Merge하기 예제를 통해 설명 하겠다. 현 상황은 master 브랜치에서 작업 중, 커밋 C2에서 experiment 브랜치를 생성해서 checkout 하고 C4를 커밋. master에서 C3를 커밋했다. 이제 작업이 완료된 experiment 브랜치를 master 브랜치로 합치려고..