Today's Codekata
// 문자열 내림차순으로 배치하기
public class Solution {
public String solution(String s) {
String answer = "";
for (char c = 'z'; c >= 'a'; c--) {
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == c) {
answer += c;
}
}
}
for (char c = 'Z'; c >= 'A'; c--) {
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == c) {
answer += c;
}
}
}
return answer;
}
}
// 부족한 금액 계산하기
public class Solution {
public long solution(int price, int money, int count) {
long totalPrice = 0;
for (int i = 1; i <= count; i++) {
totalPrice += (long) price * i;
}
return totalPrice > money ? totalPrice - money : 0;
}
}
-- 진료과별 총 예약 횟수 출력하기
SELECT MCDP_CD "진료과코드",
COUNT(*) "5월예약건수"
FROM APPOINTMENT
WHERE APNT_YMD BETWEEN '2022-05-01' AND '2022-05-31'
GROUP BY 1
ORDER BY 2, 1
-- 입양 시각 구하기
SELECT HOUR(DATETIME) AS HOUR,
COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19
GROUP BY 1
ORDER BY 1
Today I Learned
Web Application
Web Server
기능: HTML, CSS, JS 등 정적 리소스를 그대로 제공
동작 원리: HTTP 요청에 따라 리소스를 응답
대표 서버: NGINX, Apache
구조 특징: 단순하고 빠름
※정적 리소스란?
서버에 이미 완성된 형태로 존재하며 그대로 응답되는 파일들
WAS (Web Application Server)
기능: 정적 리소스 제공 + 동적 로직 수행 + DB와 연동
구조 특징: 서버 내부에서 코드 실행 후 동적 응답 생성
대표 WAS: Tomcat (Spring Boot 내장), Jetty, Undertow
Java에서는 Servlet Container 기능을 제공하면 WAS 이다.
Web Server와 WAS 차이
| 구분 | Web Server | WAS |
| 리소스 | 정적 리소스 | 동적 컨텐츠 + 정적 리소스 포함 |
| 역할 | 단순 전달 | 비즈니스 로직 + DB 연동 수행 |
| 예시 | NGINX, Apache | Tomcat, Jetty, Undertow |
웹 시스템 구성 방식 (Web Server + WAS 구성 (권장))
Web Server가 정적 리소스를 처리
WAS는 동적 요청만 수행
효율적인 자원 분산 및 오류 대응 가능
Servlet 핵심 개념
Java에서 HTTP 요청/응답 처리
HttpServlet을 상속하여 구현
WAS 내에서 서블릿 컨테이너가 서블릿 객체를 관리
Servlet 동작 흐름
1. 클라이언트 → HTTP 요청
2. WAS → Request/Response 객체 생성
3. Servlet 컨테이너 → Servlet 호출
4. Servlet → 비즈니스 로직 수행
5. Response 객체에 데이터 설정 → 응답 완료
Servlet 객체는 싱글톤 + 멀티 스레드 처리
※싱글톤이란?
객체를 하나만 생성해 공유하는 방식. 자원 낭비를 막고 상태 일관성을 유지하지만, 공유 변수 관리에 주의가 필요하다.
간단히 정리하면, Servlet은 Java 웹 개발의 핵심 엔진이고, Servlet Container는 이를 안전하고 효율적으로 운용하는 관리자이다.
Thread & WAS 요청 처리 방식
| 처리 방식 | 설명 | 장점 | 단점 |
| Single Thread | 하나의 요청만 처리 | 구조 단순 | 요청 대기, 지연 시 전체 영향 |
| Multi Thread | 요청마다 Thread 생성 | 동시 처리 | Thread 생성 비용↑ |
| Thread Pool | 재사용 가능한 Thread들 대기 | 자원 효율적 | 최대 수 제한 필요 |
※Context Switching: CPU가 작업에서 작업으로 전환할 때 발생하는 성능 비용이다.
SSR(Server Side Rendering) 과 CSR(Client Side Rendering)
| 구분 | SSR | CSR |
| 렌더링 위치 | 서버 | 클라이언트 |
| 속도 | 초기 로딩 빠름 | 인터랙션 빠름 |
| SEO | 매우 유리 | 불리 (크롤러 JS 해석 어려움) |
| 기술 | JSP, Thymeleaf | React, Vue |
※SEO(Search Engine Optimization)란?
사이트가 검색 결과 상위에 노출되도록 구조를 개선하는 작업이다.
SSR 환경에서는 서버에서 HTML을 완성해서 보내므로 SEO에 더 유리하다.
이것만은 꼭 기억하기
1. 네트워크 통신은 HTTP로 이루어진다.
2. HTTP는 무상태 프로토콜이며 비연결성 특징을 가지고 있다.
3. HTTP Message 구조
a. HTTP Method
b. 상태코드
c. HTTP Header
4. HTTP API는 Restful 하게 설계해야 한다. 최소 성숙도레벨 2를 지켜야 한다.
5. Servlet은 Java에서 Request, Response를 쉽게 다루게 해주는 객체이다.
6. Servlet Container는 Servlet 객체를 싱글톤으로 관리한다.
7. WAS는 다중 요청 처리를 위해 Multi Thread를 지원한다.
8. SSR 방식은 서버에서 동적인 페이지를 완성하여 응답한것을 브라우저에서 화면을 출력한다.
9. CSR은 HTTP API 통신으로 얻은 결과를 통해 브라우저에서 동적으로 화면을 출력한다.