주니어 때는 성장하는 법을 배우고 성장 곡선의 기울기를 가파르게 만들어야 할 때! 하드 스킬은 성장의 더하기라면 소프트 스킬은 곱하기이다. 소프트 스킬은 한 번 익혀두면 평생 써먹을 수 있다. chatGPT가 하드 스킬은 대체할 수 있더라도 과연 소프트 스킬을 대체할 수 있을지는 의문이다. 1. 그림으로 소통하기개발자는 커뮤니케이션을 못하는 것이 아니다.커뮤니케이션이란? "전달자와 수신자 사이의 정보 전환, 개인을 포함한 집단 간의 의미의 전달" 이라고 정의되기도 하고, "일반적인 상징을 통한 정보나 의사의 전달" 이라고 정의하기도 한다. 즉, 의사나 정보를 갖고 있는 자가 그것을 받아들이려는 타인에게 전달하는 언어적인 것과 비언어적인 것이 해석되는 모든 과정을 의미한다. 커뮤니케이션은 말하기가 아니다...
CI / CD란?Continuous Integration (CI)지속적인 통합이라는 의미로 제품(어플리케이션 코드)의 새로운 변경 사항이나 추가적인 사항을 정기적으로 빌드 및 테스트가 되어 최종 형상으로 병합하는 과정을 의미한다.CI의 핵심 목표는 버그를 신속하게 찾고, 소프트웨어의 품질을 개선 및 관리하며, 릴리즈의 시간을 단축하는 것에 의미가 있습니다.Continuous Delivery & Continuous Deployment (CD)지속적인 전달, 배포라는 의미로 배포하고자 하는 서비스를 운영환경으로 릴리즈 할 수 있도록 최종 결과물을 통합 레포지토리에 생성 및 배포하는 과정을 의미한다.CD의 핵심 목표는 DevOps 상 배포를 하고자 하는 일련의 과정들을 자동화를 통해 운영 리소스를 절감하고 멱..
엔티티 설계 시 주의점 엔티티에는 가급적 Setter를 사용하지 말자 Setter가 모두 열려있는 경우, 변경 포인트가 너무 많아서 유지보수가 어렵다. 모든 연관관계는 지연로딩으로 설정하자 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. 실무에서 모든 연관관계는 지연로딩(LAZY)으로 설정해야 한다. 연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join 또는 엔티티 그래프 기능을 사용한다. @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야한다. (@XToMany의 경우는 기본이 지연로딩이다.) JPQL N+1 문제란? JPQL로 select o f..
Java 8 도입 이후에 Optional을 활용하면서 자주 사용하는 orElse(), orElseGet()의 차이점을 알아보겠습니다. 1. orElse(), orElseGet() 이란? orElse(), orElseGet 구현 코드 실제로 orElse()와 orElseGet()의 코드를 살펴보자. /** * If a value is present, returns the value, otherwise returns * {@code other}. * * @param other the value to be returned, if no value is present. * May be {@code null}. * @return the value, if present, otherwise {@code other} *..
@AllArgsConstructor, @RequiredArgsConstructor 사용 주의 @AllArgsConstructor @RequiredArgsConstructor @ToString public class User { public String id; public String password; } 위와 같이 User 클래스를 생성했다고 했을 때 보통 아래와 같이 코드를 작성합니다. public void addUser(String id, String password) { User user = new User(id, password); userRepository.save(user); } 생성자의 첫번째 자리에는 id, 두번째에는 password가 잘 들어갑니다. 이 후 요구사항의 변경으로 User의 ..
쿠키와 세션을 왜 사용할까? HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 사용한다. 먼저 HTTP 프로토콜의 특징을 살펴보자 HTTP 프로토콜 1. Connectionless 프로토콜 (비연결 지향) 클라이언트가 서버에 요청을 했을 때, 그 요청에 맞는 응답을 보낸 후 연결을 바로 끊는 처리 방식이다. - HTTP 1.1 버전에서 Header에 keep-alive 옵션을 주어 커넥션을 계속 유지할 수 있다. (Default 옵션) - HTTP가 TCP 위에서 구현되었기 때문에 연결 지향적이라고 할 수 있다. 하지만, HTTP는 원칙적으로 요청을 처리 후 커넥션을 반환하는 비연결 지향적인 특성으로 커넥션 관리에 대한 비용을 줄이는 것을 명확한 장점으로 하기때문에 비연결 지향이라고 한다. 2. Sta..
JDBC란? Java DataBase Connectivity의 약어로 다양한 종류의 관계형 데이터베이스에 접속하고 SQL문을 수행하여 처리하고자 할 때 사용되는 표준 SQL 인터페이스 API이다. 즉, 자바에서 데이터베이스를 사용하는 절차에 대한 규약이다. DBMS에 따라 DB를 다루는 방식이 다르다면, 사용자는 각 DBMS의 방식을 모두 알아야하기 때문에 필요한 지식이 너무 많습니다. 그래서 JDBC를 통해 추상화된 인터페이스를 제공하기만 하고, 데이터베이스의 종류에 상관없이 각 JDBC 드라이버를 통해 특정 DBMS를 사용할 수 있습니다. JDBC Driver 실제 DB 관련 기능이 동작하려면 위에서 말한 인터페이스만으로는 작업할 수 없습니다. 따라서 java.sql의 인터페이스들을 상속받은 클래스 ..
🔗 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/60061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📝 풀이 문제를 처음 읽고 구현문제라는 것을 알 수 있어야한다. 또한 n제한이 100이고 build_frame의 최대 길이가 1000이므로 시간복잡도를 고려안해도 되는 구현문제라는 것을 알 수있다. 하지만 문제가 매우 헷갈리기도 했고 조건을 구현하기 매우 어려웠다. 특히, 특정 좌표에서 보와 기둥을 둘 다 지을 수 있다는 것을 체크해야한다. 일단 build_frame에 따라 기둥이나..
Socket이란? 소켓(Socket)은 TCP/IP 기반 네트워크 통신에서 데이터 송수신의 마지막 접점입니다. 소켓 통신은 이러한 소켓을 이용하여 서버와 클라이언트 간의 데이터를 주고받는 양방향 연결 지향성 통신입니다. 보통 지속적으로 연결을 유지하면서 실시간으로 데이터를 주고받아야 하는 경우(게임, 채팅 등)에 사용됩니다. 소켓은 클라이언트 소켓과 서버 소켓으로 구분되며, 소켓간 통신을 위해서는 네트워크 상에서 클라이언트와 서버에 해당하는 컴퓨터를 식별하기 위해 IP주소와 컴퓨터 내에 현재 통신에 사용되는 응용프로그램을 식별하기 위한 포트 번호가 사용됩니다. TCP Socket - 양방향으로 바이트 스트림을 전송, 연결 지향성 - 오류 수정, 전송 처리, 흐름 제어 보장한다. - 송신된 순서에 따라 중..
1. Pinpoint란? Pinpoint는 네이버에서 만든 대규모 분산 시스템의 성능을 분석하고 문제를 진단, 처리하는 플랫폼 즉 APM (Application Performance Monitoring) 도구 입니다. 또한 내부적으로 서버맵, 실시간 활성 스레드 차트, 요청 / 응답 차트, API 호출 상세 기록, 서버의 상태를 실시간으로 시각화하여 볼 수 있는 기능을 제공합니다. 특히나 요즘 같이 분산환경에서 애플리케이션 모니터링에 최적화된 기능들이 많아 백엔드를 구성하는데 있어 큰 도움을 받을 수 있습니다. 2. 구성요소 Pinpoint는 위와 같이 3가지 모듈인 Pinpoint Agent, Pinpoint Collector, Pinpoint Web으로 이루어집니다. Pinpoint Agent 스프링..