JaeWon's Devlog
article thumbnail
[클린코드] 1장. 깨끗한 코드
Study/CleanCode 2023. 10. 8. 18:01

클린코드(CleanCode)를 읽고 간략하게 정리한 글입니다. 1장. 깨끗한 코드 - 클린 코드의 책의 목표는 아래와 같다. 좋은 코드와 나쁜 코드를 구분하는 능력을 갖춘다. 좋은 코드를 작성하는 방법을 익힌다. 나쁜 코드를 좋은 코드로 바꾸는 실력을 만든다. 1. 코드가 존재하리라 - 코드는 요구사항을 상세히 표현하는 수단이다. - 기계가 실행할 정도로 상세하게 요구사항을 명시하는 직업, 이것이 프로그래밍이다. - 프로그래밍 언어에서 추상화 수준은 점차 높아지겠지만, 코드가 사라지진 않을 것이다. - 고도로 추상화된 언어나 특정 응용 분야 언어로 기술하는 명세 역시 코드이다. 2. 나쁜 코드 - 우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고(리팩토링) 생각한 경험이 있다. - 어떠한 ..

article thumbnail
[MySQL] Clustered Index와 Secondary Index 정리
BackEnd/DataBase 2023. 10. 4. 20:37

1. 인덱스(Index) 1-1. 인덱스란? - 데이터를 좀 더 빠르게 찾을 수 있도록 해주는 도구 조금 더 자세히 설명하자면, Disk에서 발생하는 I/O 시간은 Main Memory 에서 발생하는 I/O에 비해 매우 크다. 인덱스를 설정함으로서 DB의 데이터를 검색시 Diks 의 I/O가 빈번히 일어나지 않도록 하는 것이다. - 속성 값을 기준으로 이미 정렬되어 있으며, 그에 해당하는 레코드 주소가 있어 빠르게 데이터 접근이 가능 - 인덱스 검색을 위한 조건은 WHERE 절에 인덱스로 설정된 컬럼명이 나와야 함 1-2. 장/단점 장점 - 검색 속도가 빨라진다. -> (무조건 그런 것은 아니다.) : 인덱싱보다 전체 테이블 검색(Full Scan)이 더 나은 경우 - 적은 처리량으로 결과를 얻을 수 있..

article thumbnail
[JAVA] JAXB(Marshalling, UnMarshalling) 사용하기(Feat. XML 파싱)
BackEnd/Java 2023. 8. 16. 13:37

1. JAXB(Java Architecture for XML Binding) - JAXB는 Java Object 를 XML 로 직렬화 해주거나, XML 을 Java Object 로 역직렬화 해주는 Java API 입니다. 마샬링(Marshalling) : Java Object -> XML 언마샬링(UnMarshalling) : XML -> Java Object - 기본적으로 JDK6 ~ 9 버전에는 JAXB 가 내장되어 있어 라이브러리를 따로 추가할 필요가 없습니다.(JDK 11 부터는 Dependency 추가가 필요합니다) - 최근 Object 는 관련해서는 대부분 JSON(JavaScript Object Notation)을 많이 사용하지만, XML 도 종종 사용되고 있습니다. - JSON 을 다룰 때..

article thumbnail
[Spring] @Transactional 사용 시 주의할 점(Feat. 오픈전 발견한 장애)
BackEnd/Spring 2023. 8. 13. 17:05

회사에서 신규 서비스 오픈을 앞에 두고 반영 이후 운영 CBT 를 진행하다가, 오류로그가 계속 올라오는 것을 확인하였습니다. 에러 로그를 확인해보니 하나의 로직에서 DB에 Insert(저장) 후에 해당 값을 Select(조회) 하는 과정에서 발생하였습니다. 발생한 이유를 확인해보니 테스트 환경에서는 발견이 안되었는데, 운영 환경은 모두 이중화가 되면서 발생하였다. 로직은 @Transactional 어노테이션으로 트랜잭션을 걸어두었으나 트랜잭션이 끝나기 전에 Insert(저장)은 1번 Session 으로, Select(조회)는 2번 Session 으로 동작 후 Insert하면서 NPE가 발생하고 있었습니다. 위와 같은 에러가 발생했다는 것은 @Transactional 어노테이션이 제대로 동작을 안했다는 것..

article thumbnail
실무에서 전하는 따끈한 마이크로서비스 아키텍처(MSA) 이야기(2) - MSA 아키텍처
Study/인프런 2023. 8. 6. 16:18

해당 글은 인프런에서의 실무에서 전하는 따끈한 마이크로서비스 아키텍처(MSA) 이야기 강의를 보고 간략하게나마 정리한 글입니다. 실무에서 전하는 따끈한 마이크로서비스 아키텍처(MSA) 이야기 - 인프런 | 강의 클라우드 분야에서 가장 Hot한 키워드인 Microservice Architecture (MSA)의 전반적인 배경, 다양한 아키텍처 패턴,애플리케이션 유형 , 레거시 전환방법 등을 현장의 목소리로 전달합니다., 클라우드 인 www.inflearn.com 1. 아키텍처 1-1. 아키텍처란? - 목표하는 대상에 대하여 구 구성고 동작 원리, 구성 요소 간의 관계 및 시스템 외부 환경과의 관계 등을 설명하는 설계도 - 아키텍처 특성 가용성, 신뢰성, 시험성, 확장성, 보안, 민첩성, 내고장성, 탄력성,..

article thumbnail
실무에서 전하는 따끈한 마이크로서비스 아키텍처(MSA) 이야기(1) - MSA 개념
Study/인프런 2023. 7. 29. 17:15

해당 글은 인프런에서의 실무에서 전하는 따끈한 마이크로서비스 아키텍처(MSA) 이야기 강의를 보고 간략하게나마 정리한 글입니다. 실무에서 전하는 따끈한 마이크로서비스 아키텍처(MSA) 이야기 - 인프런 | 강의 클라우드 분야에서 가장 Hot한 키워드인 Microservice Architecture (MSA)의 전반적인 배경, 다양한 아키텍처 패턴,애플리케이션 유형 , 레거시 전환방법 등을 현장의 목소리로 전달합니다., 클라우드 인 www.inflearn.com 1. 마이크로서비스의 정의 1-1. 모노리스 시스템 - 애플리케이션이 한 덩어리(서버)로 구성. - 단일 프로세스 실행. - 전체 수정, 배포가 되어야 함.(간단한 수정 1건 이어도, 전체 테스트가 필요하고 배포가 이루어져야 함.) - 하나가 실패..

article thumbnail
[Java] Enum 사용 시 비교는 == 일까 equals 일까
BackEnd/Java 2023. 7. 2. 17:11

최근에 회사 동료가 코드 검사를 하겠다며 내가 작성한 코드를 보고 리뷰를 했다. 그러던 중 공통 상수로 선언한 클래스와 Enum 클래스를 사용한 것에 대해 이야기를 하였는데, Enum 을 사용하는데 왜 == 로 비교하지 않고, equals 메소드를 사용해서 비교하는가에 대해 이야기를 하게 되었다. 이 문제에 대해서 간단하게 고민해보고 생각한 것을 포스팅해보려고 한다. 1. 코드 상황 - 간단하게 구현된 코드 상태를 작성해보자면 아래와 같습니다.(이해를 돕기 위한 예제 코드입니다.) Controller @RestController public class MemberController { @PostMapping("") public String memberTest(@RequestBody RequestMembe..

article thumbnail
[Spring] e.printStackTrace() 지양하기(Feat. getStackTrace 사용)
BackEnd/Spring 2023. 6. 28. 16:02

Spring 에서 개발을 하면서 예외가 발생되면 @ControllerAdvice 가 선언된 클래스가 동작하여 알맞은 예외타입(RuntimeException, NullPointerException 등)에 메소드가 호출된다. 대부분 프로젝트마다 로깅하는 방법이 정해져있기 때문에, 거의 사용되지는 않겠지만 빠르게 개발하면서 나중에 변경해야지 하고 e.printStackTrace() 로 작성하는 경우가 있다.(작성자 본인이 그렇다...) 전체 에러 메세지는 보기는 싫고, 실제 예외가 발생된 부분(소스 위치)만 로깅하고 싶었는데 구글링해보니 똑같이 생각하신 분이 계셔서 참고하게 되었다.) 이번 글에서는 e.printStackTrace를 말고 getStackTrace 로 간단한 코드를 통해서 확인해보려 한다. 1...

article thumbnail
[디자인패턴] 전략(Strategy) 패턴
디자인패턴 2023. 4. 21. 11:06

최근에 NextStep(넥스트스탭)에서의 TDD, 클린코드 With Java 를 수강하면서, 첫번째 미션인 자동차 경주를 구현하던 도중, 리뷰어님께서 아래와 같은 말씀을 해주셨다. 처음에 작성한 코드는 아래와 같았다. public class Car { private static final int MOVE_CONDITION = 4; ... private boolean isMove(int randomNum) { return randomNum >= MOVE_CONDITION; } } 위 코드대로라면 만약 Car의 객체가 조금 다르게 4보다 큰 것이 아닌 5, 7보다 크다면 매번 Car 라는 클래스를 새로 만들어야 한다. 이번 글에서는 위 로직을 전략패턴을 사용하여 위 이슈를 리팩토링을 하면서 정리하고자 한다...

article thumbnail
[ERROR] Java에서 크롤링 Selenium(셀레니움) 사용 시 Unable to establish websocket connection to 에러 해결
Error 2023. 4. 18. 17:21

1. 에러 발생 상황 - Java 에서 크롤링을 위해서 Selenium 을 사용하고자 하였는데 아래와 같은 에러가 발생. - 크롤링을 위해서 Chrome 브라우저 창을 열어 접속을 시도한 것 같은데, WebSocket 에 대한 연결을 할 수 없다는 메시지 같았다. org.openqa.selenium.remote.http.ConnectionFailedException: Unable to establish websocket connection to http://localhost:53222/devtools/browser/40fe271d-cd90-4cf0-8440-600b29aa2fe4 Build info: version: '4.1.4', revision: '535d840ee2' System info: host..