전체 글 68

함께 자라기: 애자일로 가는 길

김창준님의 함께 자라기:애자일로 가는길 을 읽고 내가 기억하고 싶은 부분을 위주로 정리했다. 자라기 자기계발의 중요성, 복리로 돌아온다. 나에게 얼마나 무엇을 투자했느냐가 1년, 2년 후의 나를 결정한다. 하루에 한시간, 두시간 투자하는 자기 계발 시간이 축적되면 엄청난 차이를 불러온다. 지식이나 능력은 복리로 이자가 붙기 때문이다. 복리 조직은 다음 결과물을 만들 때 더 높은 수준의 결과물을 만들 수 있다. 따라서 조직의 성장이 중요하다. 나를 개선하는 방법 내가 가지고 있는 것을 잘 활용한다. 이미 알고 있는 것들을 하이퍼링크로 촘촘히 연결하고, 그 노드들이 빠른 속도로 이동하여 시너지 효과가 날 수 있도록 한다. 새로운 것이 들어오면 기존에 있던 것과 충돌을 시도하라. 외부 물질을 체화하라. 주기적..

카테고리 없음 2022.01.22

[Spring] Entity, DTO, VO 비교하기

스프링을 처음 접할 때 Entity, DTO, VO, Dao, Repository 등등의 용어가 굉장히 헷갈렸다. 그 중에서도 데이터와 가까이(?) 있는 Entity, DTO, VO 세 가지를 비교해보려고 한다. 일단 가장 구분이 쉬운 것은 Entity이다. Entity는 DB와 가장 가깝다. 테이블과 매핑되는 객체이다. 각 id를 통해 entity를 구분한다. entity에는 @Getter와 @Setter가 없다. 대신 메소드를 활용해 변경할 수 있다. 다음으로 VO는 객체의 불변성을 보장하는 객체이다. 서로 다른 이름을 가지고 있는 객체더라도 모든 속성 값이 같다면 두 인스턴스는 같다고 할 수 있다. 따라서 VO는 Object 클래스의 equals()와 hashCode()를 오버라이딩 해야한다. (I..

스프링 2021.12.01

[Spring] directory 구성 (계층형/도메인형)

프로젝트를 진행하면 하나의 도메인에 따른 repository, controller, service가 늘어난다. 계층형: repository는 repository끼리 넣고, domain은 domain끼리 넣고.. 이런 프로젝트가 있는 반면. 도메인형: 하나의 도메인 아래 관련 controller, service, repository 등 패키지를 따로 만들어 각각 넣어둘 수도 있다. controller 패키지에 자바 파일이 열개만 넘어가도 알아보기는 힘들다. 패키지는 많아지겠지만, 도메인형으로 구성하면 파일이 많아져도 관련 코드가 모아져 있어 한 눈에 더 보기 쉽다고 느껴졌다. 다음 글이 좋아 메모해둔다. https://cheese10yun.github.io/spring-guide-directory/

스프링 2021.12.01

[Spring] Controller의 파라미터를 받는 여러 가지 방법 (Parameter Mapping 방법)

@PathVariable 중괄호를 활용하여 변수처럼 적고 http://localhost:8080/v1/product/10 과 같이 호출 가능하다. 1 2 3 4 5 6 7 8 9 10 @RestController @RequestMapping(path = "/v1") public class TestController { // 상품 조회 @GetMapping(path = "/product/{productId}") public Product selectProduct(@PathVariable(name = "productId") Integer productId) { return productService.getProductBy(productId); } cs @RequestParam http://localhost:..

스프링 2021.12.01

토비의 스프링 4장 예외

JdbcTemplate 적용 전 1 2 3 public void deleteAll() throws SQLException{ this.jdbcContext.executeSql("delete from users"); } Colored by Color Scripter cs JdbcTemplate 적용 후 1 2 3 public void deleteAll(){ this.jdbcTemplate.executeSql("delete from users"); } Colored by Color Scripter cs jdbcTemplate 적용 후, SQLException은 사라졌다. 예외가 발생하면 그것을 catch 블록을 써서 잡아내고 예외 처리를 해주어야한다. 왜냐하면 어떤 기능이 비정상적인 동작을 하거나 메모리/리소..

스프링 2021.11.22

파이썬 수행 시간 측정 방법

time 모듈을 활용해서 코드 수행 시간을 측정한다. 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 from random import randint import time array = [] # 1~100 수들로 이루어진 100,000개 for _ in range(10000): array.append(randint(1, 1000)) start = time.time() # 1 선택 정렬 for i in range(len(array)): min_index = i for j in range(i + 1, len(array)): if array[min_index] > array[j]: min_index = j array[i], arr..

The Garden of Forking Paths: Towards Multi-Future Trajectory Prediction 논문 리뷰

이 연구는 Carnegie Mellon University와 Google Research 팀에서 진행된 연구이다. 논문의 핵심 주제는 Multi-Future Trajectory Prediction(다중 경로 예측)이다. 논문의 제목 The Garden of Forking Paths 은 추측해보건데 아르헨티나의 소설가 호르헤 루이스 보르헤스의 책 이름에서 가져온 듯 하다. 책의 요약 내용을 보면 "사람은 순간순간 다른 결정을 할 수 있고, 그로 인해 여러 결과를 도출할 수 있다”가 주제가 되는 듯 하다. 즉, 여기서는 상황에 따라 선택한 경로가 또다시 여러 경로를 도출하게 된다는 의미로 해석 가능할 것 같다. 이전의 경로예측의 논물을 살펴보면 Social-LSTM, Next 모델들은 단일 경로를 예측하는 ..

대외활동 2020.05.02

Apache Kafka란?

Apache Kafka 대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 메시징 플랫폼 Netflix, Airbnb, 카카오, 네이버 등의 주요 기업들에서 사용하는 대규모 데이터 처리 플랫폼 카프카의 탄생 배경 처음 링크드인이 급성장을 이루며 데이터 처리 시스템의 문제점을 개선시키고자 탄생했다. 통합된 데이터 전송 영역이 없었기 없었고, 데이터 파이프라인의 관리가 어려웠다. 데이터 분석을 위하여 파이프라인이 서로 연결되어야 했는데, 파이프라인별로 데이터 포맷과 처리하는 방법들이 달라 확장에 어려움이 있었다. 따라서 다음과 같은 시스템을 만들게 되었다. 프로듀서와 컨슈머의 분리 메시징 시스템과 같이 영구 메시지 데이터를 여러 컨슈머에 허용 높은 처리량을 위한 메시지 최적화 데이터 증가에 따른 스케일..

카테고리 없음 2020.04.26

[GoLang 시작하기 10] Channels

Go 채널은 데이터를 주고 받는 통로이다. Go 채널은 Go루틴들 사이의 데이터를 주고받는 데에 사용된다. 이 파이프라인을 통해서 메세지를 보내거나 받을 수 있다. 이 채널을 이용하여 동시성 구현 시 락 등을 이용하지 않고도 할 수 있다. 또 교착 상태나 경쟁 상태를 파악하기 쉽도록 지원된다. 예제 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 32 package main import ( "fmt" ) func main() { ch:=make(chan bool) nums:=[2]string{"one","two"} for _, n :=range nums{ go isReady(n,ch) } fmt.Prin..

Golang 2020.04.10