분류 전체보기210 [CH 05.01, 05.02] 리팩토링, 단위테스트 리팩토링을 하기 위해서는 설계 원칙, 디자인 패턴, 코딩 규칙 등을 능숙하게 사용할 수 있어야 하기 때문에 문제를 해결하는 것보다 더 많은 능력이 요구된다. 리팩토링의 목적 리팩토링의 정의 리팩터링은 코드에 대한 이해를 쉽게 하기 위해 소프트웨어의 내부 구조를 개선하는 것으로, 소프트웨어의 외부 동작을 변경하지 않고 수정 비용을 줄이는 것을 목적으로 한다. (마틴 파울러)"외부동작을 변경하지 않는다"- 함수를 리팩토링 한다면, 함수의 정의를 변경하지 않는다.- 라이브러리를 리팩토링 한다면, 외부에 노출된 API, 메서드를 변경하지 않는다. 리팩토링이 필요한 이유 1) 코드 품질 저하를 효과적으로 방지한다.2) 고품질 코드는 한번의 설계에 나오는 것이 아니라, 지속적인 작업의 결과로 나오는 것이다.3) 초.. 2025. 8. 12. [CH03.01] 설계 원칙 - 단일 책임 원칙 단일 책임 원칙의 정의 및 해석 클래스와 모듈은 하나의 책임 또는 기능을 가지고 있어야 한다는 설계 원칙* 여기서 모듈을 - 추상적인 개념으로 클래스도 일종의 모듈이라고 정의하거나 - 클래스보다 포괄적인 개념으로 여러개의 클래스가 모여 모듈이 된다고 정의 가능그렇지만 모듈을 어느 개념으로 정의하더라도 단일 책임 원칙의 개념을 적용하는데 큰 지장은 없다클래스에 비즈니스와 관련 없는 기능이 두 개이상 포함되어있으면 단일 기능을 가진 더 작은 클레스로 분할 해야 한다.클래스에 단일 책임이 있는지 판단하는 방법 [주문 관련 기능 vs 사용자 관련 기능] 과 같은 예시는 서로 다른 기능임을 구분하기 쉬우나, 다음과 같은 상황에서 클래스가 단일 책임 원칙을 만족하는지 판단하는 것은 쉽지 않다.public class.. 2025. 8. 5. [CH02.09] 상속보다 합성 상속이 더이상 사용되지 않는 이유 상속을 이용한 AbstractBird 구현 예시 public class AbstractBird { public void fly() {}}public class Ostrich extends AbstractBird { public void fly() { throw new UnsupportedMethodException("에러메세지"); }} 다른 날지 않는 새들에 관련된 클래스를 구현할 때마다 예외를 발생시켜야 하고, 날지도 않는 새에게 fly() 함수를 구현하는 것은 최소 지식 원칙(LOD)에도 위반된다. 위의 문제를 해결하기 위해서 특정 기준으로 나누어 클래스를 세분화 한다면, AbstractBird- AbstractFlyableBird- A.. 2025. 8. 4. [CH03.07-03.08] 설계원칙 KISS 원칙 Keep It Simple and StupidKeep It Short and SimpleKeep It Simple and Straight 적은 줄 수의 코드가 더 간단하지 않다ip 주소 (ipAddress) 변수가 유효한지 검사하는 코드를 작성하는 예시를 비교해보자. 1) 정규 표현식을 사용한 예제public boolean isValidIpAddressV1(String ipAddress) { if (StringUtils.isBlank(ipAddress)) { return false; } String regex = "^(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\." + "(\\d{1,2}|1\\d{2}|2[0-.. 2025. 7. 31. [CH01] 개요 코드 설계를 배우는 이유코드설계를 배우면 확장성과 가독성이 높은 유지보수가 용이한 코드를 작성 가능하다.코드 설계 지식은 사실 일반적으로 사용되지 않는 판타지스러운 것이 아닌가? (책에서 왜 배워야 하는지 설명)고품질의 코드 작성대부분의 개발자는 고품질 코드를 작성할 시간이 없을 뿐 아니라, 무엇이 '고품질 코드' 인지 알지 못해 처음 입사했을 때와 비슷한 수준의 코딩 스킬을 구사한다. 복잡한 코드 개발 다루기개발하면서 만나는 어려움 두가지가 있다.① 고도의 기술이 필요한 케이스 - 자율 주행, 비디오 인식 등② 높은 수준의 기술은 필요하지 않지만, 코드의 양이 많거나 비즈니스 적으로 복잡한 케이스②번 '소프트웨어 개발의 복잡성' 은 코드 설계 지식으로 해결 가능하다.*유지보수하기 좋은 코드를 작성하기.. 2025. 7. 21. [CH11] 자주 쓰는 서버 구조와 설계 패턴 MVC 패턴 Model : 비즈니스 로직 처리View: 사용자가 보게 될 결과를 생성하여 전달 (HTML, 타임리프, json ... )Controller: 사용자의 요청을 해석하여 모델을 실행, 뷰를 선택하여 사용자에게 응답 제공 계층형 아키텍처 계층형 아키텍처란? 계층1 > 계층 2 > 계층 3 ...계층마다 특정 역할을 수행하고 하위 계층에 의존상위 계층은 하위 계층에 의존할 수 있지만, 하위 계층은 상위 계층에 의존 불가계층이 밑의 하위 계층에만 의존하도록 강제할 수 있고, 건너의 하위 계층까지 의존하도록 허용할 수도 있음 웹 애플리케이션에서의 4계층 표현(UI) 계층: 사용자와의 상호작용을 담당 (컨트롤러, 뷰의 역할)응용 계층: 모델 계층과 인프라계층을 사용하여 필요한 기능을 구현하고 표현.. 2025. 6. 22. [CH09] 최소한 알고 있어야 할 서버 지식 개발자와 서버 가상화 장비, 물리장비 / 장비에 설치된 OS / OS 에서 구동하는 프로그램 등을 모두 [서버]라고 부를 수 있지만, 해당 챕터에서 말하는 서버는 애플리케이션 프로그램을 구동하는 OS를 지칭VirtualBox, Vagrant 등을 사용하면 OS를 간단하게 설치하고 설정 가능 OS 계정과 권한 리눅스에서의 계정과 권한 관리 root 계정: 모든 권한을 가진 관리자 계정보통 인프라 담당만 root 계정 접근 권한을 갖고 나머지 개발자는 별도의 사용자 계정 이용하여 서버에 연결 파일 시스템과 권한ls -l 명령어로 파일 정보를 확인해보자 -rw-r--r-- : 파일 권한user: 소유자staff: 소유 그룹파일 권한에서 첫번째 세글자는 소유자의 권한, 두번째 세글자는 소유그룹의 권한, 마지.. 2025. 6. 19. [CH10] 모르면 답답해지는 네트워크 기초 네트워크 지식을 모르면 ex. 서버에서 외부 API 를 받아서 사용하고 있는데, 요청이 안된다.외부 API 를 제공하는 팀에 문의하면 잘 응답한다고 한다.아웃바운드, 인바운드 허용 정책도 이상 없었다. 원인을 살펴보니, 서버에서 외부로 나갈 때 사용하는 IP를 외부 API 제공 팀에 잘못 알려주었기 때문➡️ 네트워크 엔지니어가 아니더라도 개발자라면 네트워크에 대한 이해가 필요 노드, 네트워크, 라우터 노드: 데이터를 송수신 하는 모든 장치: ex. 휴대폰, 노트북, 서버 등네트워크: 노드가 서로 데이터를 주고 받기 위해 연결된 시스템패킷: 노드가 네트워크를 통해 주고 받는 데이터의 단위: 패킷 = 헤더(송수신 정보) + 페이로드(데이터)라우터: 공유기에 연결된 기기(노드)들은 같은 네트워크 상에서 통신:.. 2025. 6. 13. [CH02] 느려진 서비스, 어디서부터 봐야 할까 처리량과 응답시간 서버 성능과 관련된 중요한 지표 2가지: 응답시간, 처리량 응답 시간 1) 앱에서 API 서버로 요청- 서버 연결- 서버로 데이터 전송2) API 서버 실행- SQL 실행- 응답 생성 3) 클라이언트로 데이터 전송- JSON 응답 응답 시간의 측정 TTFB (TIme To First Byte): 응답 데이터 중 첫번째 바이트가 도착할 때까지 걸린 시간TTLB (Time To Last Byte): 응답 데이터 중 마지막 바이트가 도착할 때까지 걸린 시간응답시간은 보통 1초보다 짧고 ms(밀리초 - 1/1000초) 단위를 사용하여 측정 서버 처리 시간에서 확인할 것 로직 수행 (it, for문)DB 연동 (SQL 실행)외부 API 연동응답 데이터 생성 (전송)네 가지 요소 중에서 DB .. 2025. 5. 20. 개인 프로젝트(백엔드)에서 CI/CD 적용하기 배포 과정에 CI/CD를 적용하지 않았을 때 (1) 스프링 프로젝트를 EC2 서버에 배포하는 과정 sudo apt updatesudo apt install openjdk-17-jdk -y(java -version)git clone *****./gradlew clean buildnohup java -jar ****-SNAPSHOT.jar (build > libs) (2) 코드 수정이 발생했을 때 재배포하는 과정git pull orgin main (+ Git 인증)sudo fuser -k -n tcp 8080 (기존 프로세스 종료)./gradlew clean build (빌드)nohup java -jar ****-SNAPSHOT.jar (build > libs) (실행)코드를 수정할 때 마다 EC2 서버에 .. 2025. 3. 18. 이전 1 2 3 4 ··· 21 다음