본문 바로가기

개발기술

(120)
성능 최적화 전략 성능 최적화의 관점최적화 전략에 왕도는 없다. 코드의 가독성과 기능구현이 우선이지, 성능은 문제가 되기전까지는 문제가 아니다. 성능문제는 환경에 종속적인 것이지 일반적인 원칙이라는 것은 존재하지 않기때문이다.    성능저하의 원인프로그램이 어떤 자원을 많이 쓰는지에 따라 CPU바운드, I/O바운드 작업으로 나뉜다. I/O 바운드 작업은 디스크, 네트워크, 파일 시스템 등과 같은 입출력(I/O) 작업을 많이 요구하는 작업을 의미한다. CPU-바운드 작업은 CPU의 연산 능력을 많이 요구하는 작업을 의미한다. 주로, 실무에서는 CPU-바운드 작업 보다는 I/O-바운드 작업이 많다. 메모리 계층구조에 따른 소요시간계층구조에 따른 소요시간이 다르다. 외부 데이터 접근을 최소화하는 것이 백엔드 입장에서 가장 중요..
Spring 동시성이슈 해결 동시성이슈여러 요청이 동일한 자원에 접근하며 발생하는 문제를 통칭함. 주로 DB에서 동일한 레코드를 동시접근하면 문제가 발생.예) 사용자1과 사용자2가 계좌1의 잔액 1만원을 1천원 사용하는 요청을 동시에 보냈을때, 사용자1의 요청에 의해서 잔액이 9천원이 되기전에 사용자2의 요청이 시작되어 두 사용자의 요청 결과가 각각 잔액 9천원으로 저장되어 2천원 사용이 되어도 1천원만 감소하는 경우. 동시성이슈 해결방안1. DB의존적인 해결방식 : DB 기기의 Isolation Level을 Serializable로 장치를 하거나 JPA의 Optimist Lock, Pessimistic Lock을 사용하여 DB의 기능을 사용- 단점 : DB서버는 인프라 확장이 어려워 성능의 한계가 뚜렷한 기기이다. DB의존적인 방..
데이터베이스 트랜잭션 개념과 구현 (MYSQL InnoDB) 키워드 : 언두로그, MVCC, 레코드락, 갭락, 넥스트락, 격리수준, 잠금없는일관된읽기목적 : 애매한 용어들을 명확하게 정의하고자한다. 데이터 베이스의 주요 특징 (ACID)데이터베이스 트랜잭션이 데이터의 신뢰성과 일관성을 보장하기 위한 4가지 특징Atomicity (원자성):  All or nothing 트랜잭션으로 묶인 작업은 모두 실행되거나 혹은 모두 실행되지 않아야한다.Consistency (일관성): 트랜잭션 작업의 결과는 항상 일관적이어야한다. 모든 트랜잭션이 종료될 시에는 데이터는 DB의 제약조건을 지키고 있는 상태가 되어야한다.Isolation (격리성): 프로그램 내에는 여러가지 트랜잭션이 존재하지만 트랜잭션은 다른 트랜잭션과 독립적으로 동작해야한다. 서로 영향을 주지 않도록 고립되어..
스프링 전체구조 스프링 전체흐름1.서버 시작 시:스프링 부트 애플리케이션을 실행하거나 Tomcat 같은 서블릿 컨테이너에 배포하면 서버가 초기화 과정을 시작합니다.2. 스프링 부트 애플리케이션 초기화Spring Boot의 가장 중요한 특징은 애플리케이션이 실행 시 자동으로 필요한 Bean과 설정을 구성해주는 것SpringApplication.run(): main() 메서드에서 호출되며, 스프링 애플리케이션의 전체 구동을 시작합니다.스프링 부트 자동 구성(Auto-Configuration) : SpringApplication.run()이 호출되면 스프링 부트는 애플리케이션의 설정값을 로드합니다. 이때 application.yml이 읽혀지며, 설정값이 자동 구성(Auto-Configuration) 과정에 활용됩니다.클래스패..
스프링 부트와 프로젝트 초기 환경설정 스프링 부트의 핵심 목표기능설명자동 설정 (Auto Configuration)상황에 따라 필요한 설정을 자동으로 적용내장 톰캣 제공Tomcat, Jetty 같은 서버를 내장, 즉시 실행 가능독립 실행 가능 JARjava -jar 하나로 바로 실행 가능의존성 스타터 제공필요한 라이브러리를 모은 starter 패키지로 간단하게 추가 가능간편한 설정application.yml 또는 .properties 한 파일로 대부분의 설정 처리 가능 자동 설정 (Auto Configuration)Spring Boot는 spring-boot-starter-web를 추가하면, 내부적으로 WebMvcAutoConfiguration 클래스를 로딩.이 클래스는 "웹 애플리케이션에 필요한 기본 설정"을 자동으로 등록해주는 역할@Co..
Spring JPA 개념, 초기설정, Repository 인터페이스 구현 Persistence Framework데이터영속성(Persistence)이란 프로그램이 꺼져도 데이터는 사라지지 않는 것, 즉, 영구저장 DB를 사용하는 데이터를 말함. DB를 다루기 위해 필요한 프레임워크를 Persistence Framework라고 한다. Persistence Framework를 사용하면, DB관련되어 개발자가 공통적으로 작성하는 코드를 대신하여 동작시켜주어, 코드 재사용 및 유지보수에 용이하며 코드가 직관적이다.대표적인 Persistaence Framework 역할1. DB연결관리 : MongoDB, Reddis, Mysql 등에 맞는 코드를 Framework가 대신 동작하여 DB에 종속적이지 않도록 해준다2. DB와의 연결상태에 따른 코드를 Framework가 대신 동작하여 DB의..
Unit Test 코드 작성 테스트 시작 전 점검Function Test comes First. 테스트 코드를 아무리 잘짜더라도 특정한 기능이 Missing되는 부분은 테스트 코드로 잡아줄 수가 없다. 우선은 요구하는 기능이 제대로 동작하는지 API Manual Testing이 선행되고 CoreFunction이 제대로 동작하는지 확인이 완료된 후에 테스트코드를 진행한다.테스트의 중요성과거1. 방식 : 자동화하기 어려운 sql중심의 코드들이 많아, 테스트케이스를 개발자가 직접 만들고, 기능을 동작시켜보는 식으로 수동적으로 진행.  2.관점 : 해당 방식은 1회성 외주 개발 후 철수하는 방식으로 진행되어, 코드의 품질보다는 기능적 완성도만 점검하는 방식이며 코드의 유지보수성에 대해서는 중요성이 낮았음.3.단점 : 기능이 바뀌면 새로 테..
스프링 MVC, 예외처리 MVC패턴의 설계원칙**MVC(Model-View-Controller)**는 애플리케이션을 비즈니스 로직, 프레젠테이션, 사용자 입력 처리로 분리하는 아키텍처 패턴입니다.Model애플리케이션의 핵심 데이터와 비즈니스 로직을 담당.데이터베이스와 직접 상호작용하며 데이터를 저장하거나 처리.예: DAO, DTO, Service 클래스 등.View사용자에게 보여지는 **UI(User Interface)**를 담당.Model에서 받은 데이터를 사용자에게 표시.주로 HTML, JSP, Thymeleaf, React 등의 프론트엔드 기술을 사용.Controller**사용자 요청(Request)**을 받아 처리하고, 적절한 **응답(Response)**을 반환. 사용자의 요청을 해석하고, 적절한 모델 함수를 호출하여 ..