목차서론 웹 개발 라이프사이클은 웹사이트나 웹 애플리케이션을 계획, 제작, 운영하는 전체 과정을 체계적으로 정리한 프로세스다. 이는 단순히 코드를 작성하는 것 이상으로, 아이디어 구상부터 지속적인 유지보수와 개선까지 아우르는 포괄적인 과정을 의미한다. 효과적인 웹 개발 라이프사이클은 프로젝트의 성공률을 높이고, 리소스를 효율적으로 활용하며, 고품질의 결과물을 일관되게 제공할 수 있게 해 준다. 이 라이프사이클 내에서 '기획'은 특히 중요한 위치를 차지한다. 기획이란 프로젝트의 방향을 설정하고, 구체적인 실행 계획을 수립하는 단계다. 이는 단순히 아이디어를 구체화하는 것을 넘어, 프로젝트의 목표, 범위, 요구사항, 제약사항 등을 명확히 정의하고 문서화하는 과정을 포함한다. 기획의 중요성을 조금 ..
N+1 문제는 데이터베이스를 사용하는 애플리케이션에서 자주 발생하는 성능 문제 중 하나로, 특히 ORM(Object-Relational Mapping) 도구를 사용할 때 자주 나타난다. 이 문제는 하나의 메인 쿼리를 실행한 후에, 그 결과로 얻어진 N개의 레코드 각각에 대해 추가적인 쿼리(N개의 쿼리)를 실행하는 상황에서 발생하며, 불필요하게 많은 쿼리를 보내게 되어 성능 저하를 초래한다. 요약하자면 N+1 문제는 다음과 같은 상황에서 발생한다. N개의 항목을 가져오는 쿼리를 실행한다.각각의 항목에 대해 추가로 1개의 쿼리를 실행한다.결과적으로, 처음에 실행한 1개의 쿼리(N개를 가져오는)와 각 항목에 대해 실행한 N개의 쿼리를 합쳐 N+1개의 쿼리가 실행된다. Example 이어서 코드로 예를 들어보..
프로젝트 초기에 CI/CD를 구성하며 최대 저장 개수를 정해놓지 않아 20기가 가까운 빌드가 쌓인 적이 있다. 그럴때 우선 해야 할 조치는 최대 저장 개수를 설정하는 것이고, 두 번째로 해야 할 일이 쌓여있는 빌드를 지워주는 것이다. 방법은 다음과 같다. 젠킨스 웹에서 Jenkins 관리>Script Console에 들어가 다음 코드를 실행시킨다.def job = Jenkins.instance.getItemByFullName("your-job-name")def builds = job.getBuilds()int buildCount = 0builds.each { build -> if (buildCount >= 5) { build.delete() } buildCount++}여기서 ..
SQL에서 'UNION'과 'UNION ALL'은 두 개 이상의 SELECT 문에서 반환된 결과를 결합하는 데 사용된다. 말로 하니까 어려운데 예를 들어 아래와 같이 사용한다고 보면 된다.SELECT column1, column2 FROM table1UNIONSELECT column1, column2 FROM table2;그럼 'UNION'과 'UNION ALL', 두 명령어의 차이는 뭐냐, 결론부터 말하자면 '중복제거 연산의 유무'이다. 조금 상세히 정리하자면 다음과 같다. UNION 'UNION'은 결과 세트에서 중복된 행을 제거한다. 그러니까 두 SELECT 문에서 동일한 데이터를 반환하면 해당 데이터는 결과 세트에 한 번만 포함된다. 이와 같은 중복 제거 작업 때문에 'UNION' 은 'UNI..
로컬 스토리지(Local Storage), 쿠키(Cookies), 세션(Session)은 웹 개발에서 클라이언트 측과 서버 측의 데이터를 저장하고 관리하는 중요한 방법이다. 이들의 특징과 사용 사례, 보안 및 성능에 대해 간결히 정리해 보자. 선요약: 특성로컬 스토리지쿠키세션저장 용량각 도메인당 약 5MB각 쿠키당 최대 4KB서버 설정에 따라 다름수명영구적설정된 만료 시간까지브라우저 종료시 또는 세션 만료시접근 범위동일 도메인 내의 모든 페이지도메인과 경로에 따라 설정 가능서버에서만 접근 가능데이터 타입문자열문자열다양한 데이터 타입보안민감한 데이터 저장에 부적합HTTPS, HttpOnly로 보안세션ID를 통한 보안성능서버 통신 불필요, 빠름모든 HTTP 요청에 포함, 네트워크 성능에 영향서버 메모리 또..
@Service와 @Repository 애너테이션은 스프링 프레임워크에서 각각 서비스 계층과 데이터 접근 계층을 표현하는 데 사용된다. 이 두 애너테이션은 기능적으로 차이가 있을 뿐만 아니라, 내부 구조와 목적에서도 차이를 보인다. 결론부터 말하자면 두 애너테이션 모두 내부적으로는 @Component 애너테이션을 포함하고 있다. 그러나 @Repository는 추가적으로 데이터 접근 예외를 일관된 방식으로 처리하기 위한 예외 변환 기능을 제공한다. 이를 통해 애플리케이션은 더 구조적이고 명확하게 계층을 나눌 수 있으며, 각각의 역할에 맞는 클래스를 정의할 수 있다. 이러한 구분은 코드의 가독성과 유지보수성을 높이는 데 기여한다. @Service @Service 애너테이션은 비즈니스 로직을 구현하는..
@Controller와 @RestController 애너테이션은 스프링 프레임워크에서 웹 애플리케이션 개발 시 주로 사용되는 애너테이션이다. 이 두 애너테이션은 모두 클래스를 스프링 MVC 컨트롤러로 선언하지만, 그 동작 방식에는 중요한 차이가 존재한다. @Controller @Controller 애너테이션은 스프링 MVC의 전통적인 컨트롤러를 정의하는 데 사용된다. 이 애너테이션은 주로 뷰(View) 템플릿을 반환할 때 사용된다. @Controller 클래스 내의 메서드는 주로 JSP, Thymeleaf와 같은 템플릿 엔진을 통해 HTML 페이지를 반환한다. 뷰 리졸버(View Resolver)를 통해 뷰 이름을 해석하고 해당하는 HTML 페이지를 렌더링한다.@Controller는 기본적으로 뷰 리..
접근 제어자(Access Modifier)는 객체 지향 프로그래밍에서 클래스, 메서드, 변수 등의 접근 수준을 제어하기 위해 사용되는 키워드이다. 접근 제어자를 통해 외부에서 해당 멤버에 접근할 수 있는 범위를 지정할 수 있다. 이를 통해 데이터 캡슐화와 정보 은닉을 실현할 수 있으며, 자바에서는 주로 네 가지 접근 제어자가 있다. public접근 범위: 모든 클래스설명: public으로 선언된 멤버는 모든 클래스에서 접근 가능하다. 패키지나 클래스에 상관없이 어디서든 접근할 수 있다. protected 접근 범위: 동일 패키지, 서브클래스설명: protected로 선언된 멤버는 같은 패키지 내의 다른 클래스와 다른 패키지에 있는 서브클래스에서 접근 가능하다. 즉, 상속을 통해 접근 범위를 넓힐 수 있..
목차 FastAPI와 SQLAlchemy, 그리고 Pydantic을 이용한 토이 프로젝트를 진행하던 중 PostgreSQL을 사용해야 할 일이 생겼다. 그냥 MySQL을 사용했어도 되지만, SQLAlchemy와 궁합이 좋은 디비가 PostgreSQL이라길래. 찍먹 하듯이 잠깐 사용하고 넘어가게 될 테지만, 그래도 이렇게 만난 것을 기념으로 블로그에 정리를 해두기로 했다. PostgreSQL, 시작해 보자. Brief History PostgreSQL의 독음은 '포스트그레스큐엘'이다. MySQL을 '마이 에스큐엘'이라고 부르는 것과 차이가 있는데, 포스트그레스큐엘의 개발 과정을 살펴보면 그 이유를 알 수 있다. 포스트그레스큐엘은 캘리포니아대학 버클리분교의 Ingres 프로젝트에서 시작되었다. 이후 문제점을..
지속적으로 추가할 예정. 실행중인 도커로 진입 docker container exec -it kafka-kafka-broker-1-1 bash 특정 토픽 내용 확인하기 kafka-console-consumer --bootstrap-server localhost:9092 --topic topicA31 --from-beginning 특정 토픽 생성 kafka-topics --bootstrap-server localhost:9092 --create --topic topicA01 --partitions 1 --replication-factor 1 특정 토픽 삭제 kafka-topics --bootstrap-server localhost:9092 --delete --topic test-topic 특정 그룹 토픽 ..
- Total
- Today
- Yesterday
- 면접 준비
- spring
- 세모
- BOJ
- Python
- 유럽여행
- Algorithm
- 여행
- 자바
- 리스트
- 알고리즘
- 백준
- 스프링
- 유럽
- 동적계획법
- 지지
- 기술면접
- java
- RX100M5
- 세계여행
- Backjoon
- 중남미
- 야경
- 스트림
- a6000
- 파이썬
- 맛집
- 세계일주
- 남미
- 칼이사
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |