전체 글

Do Love! Write Code!
Programming/Java

[Java] Enum 은 == 비교 아니면 equals() ?

그 동안 써야지,, 하면서 계속 임시 저장되고만 있었던 게시글을 마무리 해보려고 한다. 최근 회사 내부에서 CI/CD 파이프라인에 소나큐브를 도입하면서 코드 리뷰 또한 많이 활성화가 되었다. 그중 Enum 타입에 대한 비교에 대해서 짧게 코드리뷰를 한 내용이 있는데 내용을 축약해서 정리해본다. # 발단 - 내가 등록한 PR에 있던 코드 중 특정 코드가 대략 아래처럼 되어있었다. public enum PaymentType REMITTANCE, ACCOUNT_TRANSFER, VISA_MASTER_CREDIT_CARD } public void someThingMethod(UserRequest userRequest){ if(userRequest.getPaymentType() == PaymentType.REMI..

Programming/Infra & Architecture

[네트워크 기본] OSI 7계층 & TCP/IP Model

회사 동료에게 네트워크 관련 질문을 설명을 하다가 OSI 7 계층과 TCP/IP 모델에 대한 내용을 말할 기회가 있었는데, 생각보다 까먹은 내용도 많고 제대로 정리되어있지 않아 다시 한번 정리를 해본다. OSI 7 계층은 네트워크 시스템 모델로 총 7개의 계층으로 나누어져있다. 이에 반해 OSI 5(TCP/IP 모델)은 5 계층으로 나누어져 있으며, 사실상 업계 표준은 TCP/IP 모델이다. 그 이유는 TCP/IP 모델이 제일 먼저 나와서 산업 표준으로 선택되었고 그 이후에 OSI 7 계층이 나왔기 때문이다. OSI 7 계층 Layer Number Name Data Unit Device Protocol Example L7 Application Data, Message - Http, SMTP, FTP L6..

Programming/Java

[인프런/호주 현직 자바 개발자가 묻고 답하는 영어 기술 면접] 강의 정리

JVM, JRE, JDK의 차이 JVM : 컴파일된 바이트 코드가 실행되는 머신 JRE : 자바가 구동 될 수 있는 환경 (JVM + Bytecode Verifier + Class Loader) JDK : JRE + 개발을 위한 여러 toolkit (javac, javadoc.. etc) AutoBoxing과 Unbokxing primitive 자료형은 stack 영역에서 관리되는 가벼운 데이터 wrapper class는 heap 영역에서 관리되고, 이에 대한 주소 참조 값이 stack영역에서 관리됨. Autoboxing : primitive 자료형 (int, long, float, double)이 이에 대응되는 Wrapper Class Integer, Long, Float, Double로 형변환이 되는..

Programming/Database

[DB,Transaction] Transaction 과 Lock

트랜잭션이란. 데이터베이스의 데이터를 조작하는 작업의 단위. 트랜잭션은 이론적으로 ACID 원칙을 보장해야 한다. Atomicity (원자성) : 트랜잭션의 부분 작업만 성공할 순 없다. 전체가 성공하거나, 전체가 실패해야 한다. Consistency (일관성) : 트랜잭션이 성공하면 언제나 일관성이 있는 데이터베이스 상태를 유지하는 것을 의미. 만약 모든 계좌는 잔고가 있어야 한다면, 이를 위반하는 트랜잭션은 중단된다. Isolation (독립성) : 하나의 트랜잭션이 실행되고 있을 때, 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. Durability (지속성) : 성공적으로 수행된 트랜잭션은 영원이 반영되어야 한다. 모든 트랜잭션은 로그로 남고, 시스템 장애 발생 전으로 되..

Programming/Infra & Architecture

[System Design] 1. 사용자 수에 따른 규모의 확장성

* 확장의 종류 1) 수직적 확장 (Scale-Up) - RAM, CPU 등의 주요 리소스를 추가적으로 더 할당하여, 성능을 확보하는 확장의 방법 - 서비스의 규모가 작고, 트래픽양이 적은 경우 적합 [장점] - 서버 관리가 상대적으로 용이함 - 가장 쉽고 간단한 확장 방법 [단점] - 수직적 확장에는 한계가 있음 (물리적으로 서버의 리소스가 올라갈 수 있는 한계가 있음) - 장애에 대한 자동복구(failorver), 다중화(re-dundancy) 전략을 제시하지 못함, 서버에 장애가 발생하면 전체 서비스가 중단됨. 2) 수평적 확장 (Scalue-Out) - 동일한 역할을 하는 서버를 추가로 배치하여, 요청을 분산 처리하여 성능을 확보하는 확장의 방법 - 서비스의 규모가 크고, 트래픽양이 많은 경우 적..

Programming/Algorithm

[Programmer Weekly Challenge #1] 부족한 금액 계산하기

문제 설명 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다. 놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요. 단, 금액이 부족하지 않으면 0을 return 하세요. 제한사항 놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수 처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수 놀이기구의 이용 횟수 co..

Programming/Java

[백 투 더 베이직] 객체지향 SOLID 원칙

SOLID원칙 SRP(Single Responsibility Principle): 단일 책임의 원칙 → 클래스는 단 하나의 책임을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다. OCP(Open-Closed Principle): 개방 폐쇄 원칙 → 확장에는 열려있어야 하며, 변경에는 닫혀있어야 한다. LSP(Liskove Substitution Principle): 리스코프 치환 원칙 → 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작 해야한다. ISP(Interface Segregation Principle): 인터페이스 분리 원칙 → 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다. DIP(Dependency ..

Programming/Java

[삽질일기] Arrays.asList 와 ArrayList의 차이

코딩을 하다 보면, 배열 또는 List 형태가 아닌 데이터를 List 데이터 타입으로 만들 때 간편하게 Arrays.asLIst 메서드를 활용해서 그동안 리스트 데이터를 만들고 있었다. List score1 = Arrays.asList(1, 2, 3, 4, 5); 그러다가 Arrays.asList로 만든 List A에서 DB에서 조회한 List B의 값을 빼야 하는 경우가 생겼고 아무 생각 없이 다음과 같이 코드를 작성해봤다. List score1 = Arrays.asList(1, 2, 3, 4, 5); // DB에서 값을 가져옴 List score2 = getSomeDataFromDatabase(); // DB 값을 제외한 나머지 값을 찾아보자! score1.removeAll(score2); 그랬더니,..

JohnMark
Love And Code