분류 전체보기145 [토막글] 생산성에 대한 이야기 개발자의 애질리티 (toss.tech) 개발자의 애질리티 이 글은 토스페이먼츠에 입사하신, 혹은 입사를 고려 중인 개발자분들을 위해 작성된 글입니다. 애자일하게 일한다는 것은 어떠한 의미일까요? toss.tech 위의 글을 읽고 느낀 점이 좀 있어서 간략하게 글로 남기고자 했다. waterfall vs agile 최근에 진행한 프로젝트의 경우 waterfall 방식으로 진행되었다. 초기의 설계를 잡고 이에 대한 보고를 하고 피드백을 받고 설계를 고치고 요구사항을 정리하는 등의 사전 작업을 했다. 그리고 개발을 들어가며 이에 대한 구현을 시작했는데, 이를 진행하며 설계가 잘못되었다는 것을 느끼는 포인트가 많았다. 내가 도메인에 대한 이해가 부족했든, 설계에 대한 경험이 부족했든 결과적으로 설계가 잘못되어 .. TIL/TIL 2023. 10. 28. [JAVA] Java Version 8 vs 17 처음 자바를 접했을 때 영문도 모른채 조교의 안내대로 JAVA 버전 8을 설치하여 사용하다보니 자연스럽게 사용해왔던 8버전, 그리고 현재 스프링 부트 3.0을 사용하기 위해 버전 업그레이드를 따라가면서 사용하게 된 17버전에 대한 차이를 알아보며 내가 자연스럽게 사용하고 있는 기능에 대한 복습과 놓치고 있던 점에 대해 학습하고자 한다. 개요 JAVA 8 Lambda Stream interface default Method 인터페이스가 추상메소드말고 default 선언으로 메소드를 미리 선언할 수 있는 기능 ⇒ 추후에 overriding 가능 Optional LocalDateTime JAVA 17 Pattern Matching for Switch(17에서 등장) Sealed Classes (15에서 등장,.. TIL/Java 2023. 10. 21. [CS] RESTful API란? Rest API 라는 말은 많이 들어봤고 막연하게 사용할 때 느꼈을 때 (주로 Json 형태의)데이터를 주고 받기 위해 정한 규칙, 즉 프로토콜이라고 생각했었다. 그리고 찾아볼수록 많은 정의들을 찾을 수 있었고 다들 비슷한 이야기를 하지만 조금씩 표현이 다르고 내용이 다른 점도 존재하였다. 아마 내가 적어내린 것도 그중 일부가 되겠지만 내가 이해하기 쉬운대로 정리해보려고 한다. REST == REpresentational State Transfer == 표현된 (자원의) 상태 전송 REST 자체는 API 작동 방식에 대해 조건을 부과하는 아키텍처 REST 6 가지 원칙 Uniform Interface : 서버가 표준형식으로 정보를 전송함 자원에 대한 식별 => 리소스 식별자 사용 표현을 통한 자원에 대한.. TIL/CS 2023. 10. 21. 멱등성 API? 멱등(Idempontent)성, 멱등성 API란? 첫 번째 수행한 결과와 그 후 여러 차례 반복하여 수행한 결과가 동일한 작업 또는 그 속성을 의미함 ⇒ 즉 멱등한 API라면 2번 이상 요청해도 결과가 처음 요청과 똑같이 돌아와야 한다. 단순히 돌아온 값만 같을 뿐만 아니라 DB에도 영향 없어야 함. ⇒ 의도하지 않은 문제 발생시키지 않고 요청을 재시도할 수 있음 예를 들어 이미 HTTP 메소드들 중에서 GET, PUT 같이 여러번 호출해도 매번 같은 리소스로 대체되거나 조회되는 경우 멱등성이 보장된 메소드라고 볼 수 있음 반면, 서버 데이터를 변경하는 POST, PATCH 의 경우 호출할 때마다 응답이 달라지기에 멱등하지 않음 API 통신에 멱등성을 보장하고자 한다면? 멱등키를 API 요청에 포함하자 .. TIL/BackEnd 2023. 10. 15. [Spring-Batch] 클라우드 환경에서의 Spring Batch 클라우드 환경에서 Batch 프로그램이 고려해야할 issue들과 Spring Batch는 어떻게 접근하고 있는가에 대한 글 출처: Spring Batch on Kubernetes: Efficient batch processing at scale Issue1: Fault Tolerance DB, Message brokers, Web 서비스 등 다른 시스템들과의 연결이 필요한 배치의 경우 언제든 프로세스가 돌고 있던 노드가 죽고 새로은 노드로 대체될 수 있기에 Fault-Tolerant하게 만들어져야 한다. ⇒ 트랜잭션 관리, Skip 과 retry 매커니즘을 제공 Issue2: Robustness 배치 작업을 중복 실행하는 것이 치명적인 경우가 존재하는데, 쿠버네티스의 경우 같은 Job을 중복 실행하는 점.. TIL/Spring & Spring Batch 2023. 10. 14. [Java] Effective Java 3/E item 7~9 item 7: 다 쓴 객체는 참조 해제하라 public class Stack { private Object[] stack; private int size = 0; public Stack() { stack = new Object[1000]; } public void push(Object e){ /// 구현 내용 } public Object pop(){ if(size == 0){ throw new EmptyStackException(); } return stack[--size]; } // 기타 구현 내용 } 예를 들어 위와 같이 stack을 구현하였을 때, 내용에서 메모리 누수가 발생하는 곳은 pop() 메소드를 실행시켰을 때, 논리적인 개념으로는 stack의 가장 윗 부분의 객체를 꺼내서 사용했다지만 실제.. TIL/Java 2023. 6. 13. [AWS 2023 Summit] 오픈소스 데이터베이스로 탈 오라클 최근에 AWS 2023 Summit의 2번째 날에 참가할 기회가 있었는데, 이 때 본 내용 중 가장 흥미로웠던 세션에 대해 소개해보고자 한다. 글 자체는 행사(4월 말 경) 끝나고 직후에 거의 작성해놨는데, 정리해서 올리는데 너무 오래 걸렸다...ㅎㅎ 오픈소스 데이터베이스로 탈 오라클 온프레미스로 떠있던 상용 데이터베이스 데이터를 클라우드 데이터베이스로 마이그레이션 이를 진행하기 전까지의 고민에 대한 이야기 데이터 베이스 트렌드 프론트↔서버↔(큐 캐시 메시지) ↔ 데이터 베이스 기존에는 oracle과 같은 RDBMS aws로 마이그레이션 된 경우 dynamo db가 핵심 1.자체 관리형 → AWS 관리형 다른 클라우드와 연계가 쉽다 운영부담 감소 캐시 및 영구 인메모리 데이터를 활용 스케일링 문제 해결 .. TIL/AWS 2023. 6. 12. [Java] Effective Java 3/E item 4~6 item4: 인스턴스화를 막으려거든 private 생성자를 사용해라 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰는 설계X 하지만 생성자를 명시하지 않으면 자동 생성되기에, private 생성자를 만들어 인스턴스화를 막자 이러한 방법은 상속을 불가능하게 하는 효과도 존재 Plus) 추상 클래스로 만드는 것으로 인스턴스화를 막을 수 없음. 왜냐하면 하위 클래스를 만들어 인스턴스화할 수 있기 때문 + 상속하여 사용하라는 의도로 착각될 수 있음 item5: 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 하나 이상의 자원에 의존하는 클래스를 만들 때, 사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱클톤 방식이 적합하지 않음 인스턴스를 생성할 때 생성자에 필요한 자원을.. TIL/Java 2023. 5. 28. [Java] Effective Java 3/E item 1~3 Item1: 생성자 대신 정적 팩토리 메소드를 고려하라 클래스 인스턴스를 얻는 전통적인 수단는 public 생성자 이와 별도의 수단으로 클래스는 정적 팩토리 메소드를 제공할 수 있음 정적 팩토리 메소드가 public 생성자에 비해 가지는 장단점 장점 이름을 가질 수 있음 Ex) BigInteger(int, int, Random) vs BigInteger.probablePrime 호출될 때마다 인스턴스를 새로 생성하지 않아도 됨 생성 비용이 큰 객체가 자주 요청되는 상황이라면 성능적으로 좋음 반복되는 요청에 같은 객체를 반환하는 식의 정적 팩토리 방식의 클래스는 인스턴스 통제할 수 있음. 이를 통해 클래스를 싱글톤으로 만들 수도, 인스턴스화 불가로 만들 수도 있음 반환 타입의 하위 타입 객체를 반환할 수 .. TIL/Java 2023. 5. 26. 방향과 힘, 벡터가 인생이다. 서론 최근에 개인적인 방황을 시작했다. 어떻게 보면 목표를 잃어버렸다. 학생 때는 어떠한 목표의식에 대한 고민이 없었다. 중간 고사, 기말 고사로 휘몰아치는 와중에 수능과 입시라는 장기적인 목표가 존재하였고, 이러한 목표에 도달했을 때 다음에는 졸업과 취업이라는 다음 단계의 목표를 부여받았다. 정말 대부분의 사람들이 사소한 것은 다르지만 대략적인 틀에서는 동일한 길을 걸었기에 그 과정에서 다른 길로 눈을 돌릴 틈도 그럴 만한 특별한 무언가를 가지고 있지도 않았기에 의심없이 길을 걸어왔다. 그 결과 내가 생각했던 목표인 취업이라는 목표에 도달했을 때, 나는 다음 목표를 잃어버렸다. 이전에는 단순히 직장에서 인정받고 좋은 엔지니어가 되는... 매우 추상적인 다음 목표를 상상했는데, 막상 출발선에 서니 그럼 .. 주저리주저리 2023. 5. 24. 스프링 프록시 팩토리 💡 프록시(Proxy) 란? 클라이언트가 실제 사용하려는 대상인양 요청을 받아 처리하는 역할. 프록시에게 요청을 넘겨받아 최종 처리하는 오브젝트는 타깃(Target). 타깃과 프록시인지 클라이언트가 구별할 수 없어야 하기에 둘은 같은 인터페이스를 확장해야 함. 프록시는 사용 목적에 따라 2가지로 나뉨 부가적인 기능 부여 ⇒ 데코레이터 패턴 접근 제어 ⇒ 프록시 패턴 프록시 패턴 객체 생성은 비용 ⇒ 최소한, 필요 시점까지 미루는게 좋음 타깃에 대한 접근권한 제어 가능 캐싱 프록시의 단점 프록시가 멤버변수로 타깃 오브젝트 가지기에 타깃 오브젝트에 종속적 똑같은 기능 수행하는 프록시라도 여러 타깃에 적용하려면 타깃의 갯수 만큼 프록시 생성해야 하기에 코드 중복 발생 프록시를 사용하지 않는 메소드에도 타깃으로.. TIL/Spring & Spring Batch 2023. 5. 24. 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. 이전 1 2 3 4 5 ··· 13 다음 반응형