TIL/TIL14 [토막글] 생산성에 대한 이야기 개발자의 애질리티 (toss.tech) 개발자의 애질리티 이 글은 토스페이먼츠에 입사하신, 혹은 입사를 고려 중인 개발자분들을 위해 작성된 글입니다. 애자일하게 일한다는 것은 어떠한 의미일까요? toss.tech 위의 글을 읽고 느낀 점이 좀 있어서 간략하게 글로 남기고자 했다. waterfall vs agile 최근에 진행한 프로젝트의 경우 waterfall 방식으로 진행되었다. 초기의 설계를 잡고 이에 대한 보고를 하고 피드백을 받고 설계를 고치고 요구사항을 정리하는 등의 사전 작업을 했다. 그리고 개발을 들어가며 이에 대한 구현을 시작했는데, 이를 진행하며 설계가 잘못되었다는 것을 느끼는 포인트가 많았다. 내가 도메인에 대한 이해가 부족했든, 설계에 대한 경험이 부족했든 결과적으로 설계가 잘못되어 .. TIL/TIL 2023. 10. 28. Inner Class로 DTO 관리 프로젝트 내 VO 혹은 DTO 패키지 안에 필요할 때마다 Class파일을 생성하면 DTO 파일들이 마구마구 늘어난다. 여기서 파생되는 문제점들은.. 부분적으로 중복되는 파일 갯수 자체가 많아지고 보기에 안좋다. 더 이상 ClassName이 중복되지 않는 DTO를 만들기가 어려워집니다. 필드들이 겹치는 DTO로 대충 Response를 내리다보니 Over-Fetching을 하게됩니다. Inner Class로 DTO를 관리한다면 조금 더 깔끔한 패키지를 만들 수 있고, DTO ClassName을 정하는게 수월해진다. 그래서 Inner Class로 DTO를 관리하는 것이 좋지 않나? 라는 생각으로 이러한 방법을 검토해보았다. 예시 코드 @Getter @NoArgsConstructor(access = Access.. TIL/TIL 2023. 5. 10. Lombok @Builder vs @Accessor vs Setter 서론 최근 스프링 개발할 때 Lombok의 @Builder 어노테이션을 많이 쓰고 있는데, 아무리 생각해도 기존의 방식인 get/set 방식이랑 비교해서 너무 편해지고 가독성도 좋기에 분명 성능의 일부를 포기하고 이러한 장점을 얻었을 것이라는 생각이 자연스럽게 들었다. 그렇지만 Setter를 활용하는 것은 코드의 가독성도 해치고 무엇보다 너무 귀찮다. 검색하던 와중 이러한 불편함을 해결하는 @Accessors에 대한 존재도 알 수 있었다. 그래서 @Builder 나 @Accessors 같이 편하게 만들어주는 요소들은 성능의 일부를 포기하는 것이 정말 맞나? 라는 답을 찾기 위해 테스트를 수행하고 결과에 대한 이야기를 하기 전에 @Builder와 @Accessors에 대한 이야기를 먼저 해보고자 한다. @.. TIL/TIL 2023. 4. 21. [DB] 트랜잭션 격리 수준 & 부정합 이슈 부정합 이슈 Dirty Read: 다른 트랜잭션에서 처리한 작업이 완료되지 않았음에도 불구하고 다른 트랜잭션에서 볼 수 있는 현상 Non-Repeatable Read: 하나의 트랜잭션내에서 동일한 SELECT 쿼리 실행시 항상 같은 결과를 보장해야하는 Reapeatable Read 정합성에 어긋난 것 Phantom Read: 읽을 때 쓰기 잠금을 거는 경우 다른 트랜잭션에서 수행한 변경 작업에 의해 레코드가 보였다가 안보였다가 하는 현상 트랜잭션 격리 수준 Read Uncommitted 읽기 트랜잭션이 시작했을 때 다른 트랜잭션이 Update 가능 읽기 트랜잭션이 Update 중(un-commit)인 데이터를 조회할 수 있음 ⇒ 다른 트랜잭션이 중간에 롤백을 해도 읽기 트랜잭션은 롤백 전 데이터를 조회할.. TIL/TIL 2022. 10. 6. Node.js와 Express 그리고 Nest.js Node.js 란? Node.js는 서버 사이드 도구들과 어플리케이션을 JavaScript로 만들 수 있도록 해주는 런타임 환경 런타임 환경이란 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태 Node.js 의 장단점 장점 싱글 스레드 기반 Non Blocking, 비동기 IO처리로 매우 빠른 고성능 서버 CPU 파워를 많이 필요로 하지 않는, 연결을 동시에 처리해야 하는 상황에서 좋음 프론트엔드와 벡엔드 기술의 통합으로 언어들 사이의 context shift를 다루는 시간을 줄일 수 있음 단점 싱글 스레드 모델이기에 하나의 작업이 오래 걸리면 전체 시스템 성능에 영향 많이 줌 ⇒ CPU 파워를 많이 필요로 하는 작업에 부적절 스크립트 언어의 특성 상 런타.. TIL/TIL 2022. 10. 3. [TIL] MicroServices Architecture(MSA) vs Monolithic Architecture 기본 개념 Monolithic Architecture: 한 프로젝트 안에 모든 것이 다 들어 있는 형식 MicroServices Architecture(MSA): 여러 프로젝트를 만든 뒤, 프로젝트들을 연결하여 사용 ex) 모놀리식은 네이버 웹 서비스 전체를 하나의 프로젝트를 만든 것이라 하면, MSA는 메일 프로젝트, 카페 프로젝트, 블로그 프로젝트 등등 으로 나누어 이를 연결한 형태 왜 MSA를 사용할까?... MSA의 장단점?? 반대로 네이버같은 유저 트래픽과 기능이 크고 많은 서비스를 모놀리식으로 구현했다고 가정할 때, 네이버 메일 기능을 업데이트하기 위해 서버를 내렸다가 다시 올렸는데 버그가 발생해서 몇시간 동안 서버가 먹통이 된다 라는 시나리오가 가능하다. 반면 MSA 구조라면 메일 기능은 마.. TIL/TIL 2022. 9. 26. [CS] 자료구조/알고리즘 관련(작성중...) 정렬 알고리즘 시간/공간 복잡도 Array vs LinkedList Array은 메모리상에 순서대로 데이터 저장 => 캐시의 지역성으로 인해 상대적으로 빠른 탐색 수행 인덱스로 조회할 수 있음 => 인덱스 조회 성능 높음 LinkedList는 다음 데이터의 위치에 대한 포인터를 가지고 있음 중간에 데이터를 삽입, 삭제하는 것이 용이 List vs Set List는 중복된 데이터를 저장하고 순서를 유지하는 선형 자료구조 Set은 중복되지 않은 데이터를 저장하고 순서 유지X, 선형 자료구조 Hash Function, Hash Table 해시 함수(특정 알고리즘)를 통해 key값을 해쉬 코드(작은 범위의 숫자)로 변환한다. key 값 과 해쉬 코드가 1:1 매칭이 되는 경우는 해쉬를 사용하는 의미가 없어짐, .. TIL/TIL 2022. 9. 26. [CS] 데이터베이스 관련 데이터베이스에서 인덱스를 사용하는 이유 및 장단점 검색 성능을 향상시키기 위해 사용 => 별도의 메모리 공간에 인덱스가 된 컬럼들을 기준으로 정렬하여 저장함 => 이미 정렬되어 있기 때문에 특정 조건 검색시 풀 스캔이 아닌 방법으로 더 빠르게 찾을 수 있음, 정렬 필요 없음 인덱스를 사용하는 단점으로는 인덱스를 구성하는 비용 발생 정렬 상태를 유지하기 위한 비용 발생 즉, CRUD시 인덱스를 형성하기 위한 추가적인 연산이 수행됨 인덱스를 사용하는 것이 효율적이기 위해서는 쿼리가 index를 사용하는지, Cardinality, Selectivity 같은 요소들이 고려된 인덱스가 생성되어야 함 트랜잭션(Transaction) 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위 1개의 트랜잭션에서 여러.. TIL/TIL 2022. 9. 25. [CS] OS 관련 프로세스 생성과정 PCB가 생성되며 OS가 실행한 프로그램의 코드를 읽어들여 프로세스에 할당된 메모리의 Text Segment에 저장한다 초기화된 전역 변수 및 static 변수를 data segment에 할당 HEAP과 Stack은 초기 메모리 주소만 초기화됨 PCB에 여러 정보가 기록되면 Ready Queue에서 CPU를 할당받기까지 대기 프로세스와 쓰레드의 차이 프로세스는 운영체제로부터 자원을 할당 받은 작업의 단위 쓰레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위, CPU 입장에서 최소 작업 단위 프로세스는 운영체제의 안정성을 위해 자신에게 할당된 메모리 내의 정보에만 접근할 수 있음 => 한 프로그램 처리할 때 프로세스를 여러개 사용 불가, 프로세스 말고 여러 작업을 처리하기 위해 .. TIL/TIL 2022. 9. 25. [JAVA] TIL final 키워드 필드에서 사용하면 수정 불가능 메소드에 사용하면 오버라이딩 불가능 클래스에서 사용하면 상속 불가능 상속 관련 public class InheritTest { public static class Parent{} public static class Child extends Parent{} public static void main(String[] args) { Parent parent = new Child(); // 가능 Child child = new Parent(); // 컴파일 에러 } } Marker interface / tag interface 상수도 메소드도 없는 완전히 비어있는 인터페이스 = Marker interface / tag interface 특별한 행동을 컴파일이나 J.. TIL/TIL 2022. 9. 6. [JAVA] 오버로딩(overloading) vs 오버라이딩(overriding) 맨날 헷갈리는 오버로딩과 오버라이딩... 오버로딩(Overloading)은 한 클래스 내에서 각각 다른 파라미터를 가진 동명의 메소드를 정의 컴파일타임에 결정 오버라이딩(Overriding)은 상속된 클래스에서 부모 클래스에 존재하는 메소드를 재정의 런타임에 결정 오버로딩 //overloading public class Overload { public static void get(List list) { System.out.println("List"); } public static void get(ArrayList list) { System.out.println("ArrayList"); } public static void get(LinkedList list) { System.out.println("Lin.. TIL/TIL 2022. 9. 6. [ML] Face Recognition details HOG(Histogram of Gradient) 알고리즘 사람의 형태에 대한 검출에 많이 사용되는 feature 중 하나 이미지의 지역적인 Gradient를 활용하는 방법 Edge의 양과 방향을 구분하는 특성 Overlap을 이용하여 계산 => 어느정도의 Shift에는 적응 가능 이미지를 받으면 => gamma, colour 정규화 (이미지 밝기 조절, 흑백화 => 분석에 색상 필요없으니깐) => 각 픽셀의 gradient의 크기와 방향 계산 => 각각의 cell( = 8x8 픽셀로 묶은 단위)로부터 Gradient의 방향에 대한 Gradient 크기 히스토그램을 구한다 이렇게 구해진 히스토그램은 edge의 양과 방향, 즉 gradient의 크기와 방향을 구분하는 feature rkwla => cell .. TIL/TIL 2022. 8. 24. 이전 1 2 다음 반응형