개발 생각 3 : 나의 레거시 리팩토링
2024. 12. 18. 11:30
카테고리 없음
≈아마 개발 하면서 이 코드는 정말 고치고 싶다는 생각들을 많이 하게 될거다. 회사 코드만 봐도 2000줄 3000줄이 넘어가는 코드들이 즐비하다.이외에도 객체지향보다는 절차지향, get set메소드의 무분별한 사용, 오타는 기본, 심지어 변수명조차 논리적으로 이해되지 않게 작성하는 등 별의 별일이 프로젝트에 다 섞여들어가 있다. 그래서 어떤 식으로 코드를 개선해나가야할 지 조금 분류를 하고 서비스를 개선해나가고자 한다. 1. 객체 지향 원칙2. 메서드 추출3. 함수형 인터페이스를 활용한 Switch-Case문 제거4. 디자인 패턴 (템플릿 메서드. 팩토리 패턴)객체지향 원칙어떻게 도메인을 정의하는지가 중요할듯 하다. 내가 리팩토링 하는 코드 같은 경우에는 비즈니스 로직과 히스토리 로직이 너무 혼재되어 ..
개발 생각 2 : 테스트를 위한 대량 더미 데이터 삽입 방법
2024. 12. 17. 14:14
개발 생각
이런..코드 개선하기에 대한 2편을 써야하는데 몇달쨰 미루고 있다. 이번달 내에 끝내봐야지그전에 이 주제로 이야기를 먼저 해보고 싶다. 한번은 회사에서 대량의 데이터를 넣어보고 처리 시간이 얼마나 걸리는 지 테스트해야하는 미션이 있었다. 그러면 당연히 생각하게 되는 몇가지 방법이 떠오른다. 단순 insert public void insertProducts() { String sql = "INSERT INTO products (name, price, stock) VALUES (?, ?, ?)"; try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement..
Filter 앞 TomcatFilter
2024. 12. 12. 00:17
오류 노트
오늘 되게 신기한 경험을 했다!프로젝트 코드에서는 400번대, 500번대 요청이 오면 프론트에서는 적절한 alert처리를 해주겠지만, 사실 백엔드에서는 단순히 그 에러를 뱉어내기만 했다.그래서 필요하지 않은 HttpMethod를 제한하기 위한 조치들을 단계적으로 했다.그래서 이런 보안적인 처치를 어떻게 단계적으로 검토하고 해결했는지 해결 과정을 정리해보려고 한다.SpringSecurityFIlterChain(2.7 버전 기준)Spring컨텍스트 내에서 예외를 처리하는 방법이다. 여기서 허용해줄 수 있는 Http메소드를 제한한다.@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { ..

성장 이론
2024. 11. 28. 00:58
기타
2024.11.15최근에 윤하 콘서트를 다녀왔다! 인생 첫 콘서트라는 설레임으로 퇴근 전부터 두근두근해있었다.원래는 여자친구에게 서프라이즈로 해주고 싶었지만, 콘서트 관련해서 응원봉은 사야하는지 이것저것 돌려 물어보다가 걸렸다..ㅋ콘서트는 정말 재미있었다. 공연장이 360도여서 윤하가 하루종일 뛰어다니면서 관객들과 눈마주치기 위해서 노래를 했다. 그럼에도 불구하고 헉헉대면서도 흔들림 없는 음정이나 성량은 정말 프로구나 싶은 모습들이 한두군데가 아니었다!신날 땐 신나고, 진정성이 느껴질땐 굉장한 몰입감이 느껴지는 무대들이었다. 나는 그저 노래를 듣고 즐기면 되겠지~ 했는데, 생각보다 더 많은 것들이 보였다. 무대 동선과 장치, 안무, 대사, 노래 구성 등 하나도 빠짐없이 짜임새있는 하나의 이야기가 콘서트에..

실험일지3 - 당신은 static을 얼마나 알고 있나요?
2024. 9. 7. 23:11
실험실
안녕하세요 이번에는 static 에 대해 실험해보려고 합니다. static 키워드 같은 경우에는 대부분 알고 있는 내용들은 생략해보려고 해요~ 그러다가 중간중간 상기할만한 개념이 있다면 중요성을 강조해보 Static 은 특정 인스턴스 타입에 속해있는 것이 아닌, 유형 그 자체에 속해있는 것을 의미합니다.쉽게 설몀하면, 정의한 유형을 서로 공유할 수 있는 형태인 것이죠 같은 변수명으로 다른 클래스에서 static 변수 선언이 가능할까? 가능합니다. 각각 Worker의 salary, Boss의 salary로 저장되며 둘은 서로 공유되는 상태가 아닌 채로 메모리 영역에 저장됩니다. 인스턴스를 여러개 생성하면, static 변수 선언이 공유될까?됩니다. Worker의 static 변수가 객체간에 공유되어 객체..

개발 생각 1 : 레거시와 공존하기 (DDD 월드클래스 아닙니다!)
2024. 8. 27. 23:14
개발 생각
안녕하세요 어딘가의 신입으로 일하게 된 접니다. 즐거움 반 걱정 반으로 첫 직장에 어느정도 적응을 마쳐가고 있습니다. (미쳐가고 있습니다가 맞을수도 있어요)팀의 도메인 비즈니스를 공부하고 코드를 보면서 구현 과정을 살펴보면서 어떤 논리와 흐름으로 기능이 작동하는지 많이 감상하게 됩니다.볼때마다 복잡하고 어렵게 느껴지지만, 그 안에서 배울점도 많이 느끼고, 학구열도 불타오르는 그런 열정 넘치는 단계에 있습니다! 어느회사나 코드를 보면 정말 오랜 세월동안 쌓인 방대한 분량의 로직들이 있을 겁니다. 그것도 몇년 동안 여러 사람을 거쳐온, 각자만의 생각으로 구현된 내용이 있는지라 그동안 배워온 기본 상식에 맞지 않고, 가독성이 떨어지고, 직관적인 코드를 많이 보게 될 겁니다.(어떤 회사에서는 8중 for문을 쓰..
@Transactional 동작 과정
2024. 2. 28. 16:23
Spring
스프링은 @Transactional을 통해 트랜잭션을 관리한다. 스프링은 트랜잭션 처리를 TransactionManager를 통해서 처리한다. (인터페이스 PlatformTransactionManagere 사용) 사용법 1 TransactionTemplate : 트랜잭션을 세부적으로 걸기 위해 설정한다. - 스프링 IoC를 통해 설정 영역과 DB실행 코드가 분리되었다. - db커넥션을 개발자가 관리하지 않는다. 개발자는 트랜잭션 콜백 메서드만 구현한다. - 저수준 SQLException을 스프링에서 잡아 추상화된 런타임 에외로 포장한다. @Transactional은 dynamic proxy의 특징 (클래스 혹은 메서드 단위로만 사용해야하기 떄문에 세부적인 처리가 어렵다.) 만약 한 트랜잭션에 (주문 접수..
OSIV 동작 과정
2024. 2. 28. 14:32
Spring
OSIV 의 역할 트랜잭션의 외부에서 조회에 대한 지연로딩을 제공한다. SpringBoot AutoConfiguration 1. open-in-view를 활성화하면 JpaWebConfiguration이 활성화 2. OpenEntityManagerInViewInterceptor빈이 WebRequestInterceptor에 추가된다. 3. 웹으로부터 요청이들어오면 인터셉터의 prehandle() 메서드를호출해 요청을 받음 4. TransctionSyncronizationManager로 통해 현재 요청을 처리하는 스레드에 EntityManager를 생성한다. 그리고 EntityManager를 현제 스레드에 반영한다. => 이후 EntityManager의 라이프 사이클이 변환함 (트랜잭션과 EntityManag..