1 |
우아한테크코스 4기 회고 - 1주차 |
회고 |
2 |
Java 에서 final 키워드 사용하기 |
java |
3 |
지금 내가 가져야 하는 학습 태도 |
회고 , 생각 |
4 |
Java 에서 toString 메소드의 올바른 사용 용도에 대하여 |
java |
5 |
전략 패턴 (Strategy Pattern) |
디자인패턴 , 객체지향 , java |
6 |
우아한테크코스 4기 회고 - 2주차 |
회고 |
7 |
생성자 대신 정적 팩터리 메서드를 고려하라 |
디자인패턴 , 객체지향 , 이펙티브자바 , java |
8 |
TDD (테스트 주도 개발) 에 대하여 |
TDD , java , junit |
9 |
동일성(Identity)과 동등성(Equality) |
java |
10 |
생성자에 매개변수가 많다면 빌더를 고려하라 |
디자인패턴 , 객체지향 , 이펙티브자바 , java |
11 |
[Java] Collection 을 복사하는 여러 방법 |
java |
12 |
[Java] 타입 캐스팅에 대하여 |
java |
13 |
[Java] 열거 타입 (Enum) |
java |
14 |
우아한테크코스 4기 회고 - 3주차 |
회고 |
15 |
[Java] 람다 표현식과 함수형 인터페이스 |
java |
16 |
[Java] Stream 개념 |
java , java-stream |
17 |
자바 8 표준 API의 함수형 인터페이스 (Consumer, Supplier, Function, Operator, Predicate) |
java |
18 |
[Java] Comparable 과 Comparator |
java |
19 |
우아한테크코스 4기 회고 - 4주차 |
회고 |
20 |
[Java] EnumMap |
java |
21 |
[Java] Optional |
java |
22 |
[Java] BigInteger와 BigDecimal |
java |
23 |
템플릿 메소드 패턴 (Template Method Pattern) |
디자인패턴 , 객체지향 , java |
24 |
🖋 우아한테크코스 한 달 생활기 |
회고 , 글쓰기미션 |
25 |
원시 타입 대신 VO(Value Object)를 사용하자 |
객체지향 , java |
26 |
의존성과 의존성 주입 |
디자인패턴 , 객체지향 , java |
27 |
[Java] try-with-resources |
java |
28 |
DTO의 개념과 사용범위 |
객체지향 , DTO |
29 |
직렬화(Serialization)와 역직렬화(Deserialization) |
컴퓨터공학 , java |
30 |
우테코 레벨1을 마치며 만들어진 나만의 학습 방법론 |
회고 , 생각 |
31 |
제어의 역전 (Inversion Of Control, IoC) |
객체지향 , 디자인패턴 |
32 |
Spring Bean과 IoC Container |
spring , java |
33 |
계층화 아키텍처 (Layered Architecture) |
아키텍처 , 디자인패턴 |
34 |
혼란스러운 도메인, 도메인 모델, 도메인 객체 용어 정리 😵💫 |
DDD |
35 |
REST(Representational State Transfer) API |
백엔드 , REST |
36 |
[DB] 트랜잭션(Transaction) |
데이터베이스 |
37 |
POJO (Plain Old Java Object) |
객체지향 , java |
38 |
DAO (Data Access Object) |
객체지향 |
39 |
테스트 더블 (Test Double) |
테스트 |
40 |
격리된 테스트 (Isolated Test) (feat. Spring 에서 테스트 격리하기) |
테스트 , spring , java |
41 |
Spring HandlerInterceptor를 활용하여 컨트롤러 중복 코드 제거하기 |
spring , java |
42 |
HTTP 메소드의 멱등성, 그리고 안전한 메서드 |
네트워크 , HTTP |
43 |
쿠키와 세션 (ft. HTTP의 비연결성과 비상태성) |
네트워크 , HTTP |
44 |
스프링에서 Argument Resolver 사용하기 |
spring , java |
45 |
[AWS] 리전(Region)과 가용영역(Availability Zone) |
데브옵스 , 클라우드 , aws |
46 |
[AWS] VPC (Virtual Private Cloud) (ft. CIDR, 서브넷, 라우팅 테이블) |
데브옵스 , 클라우드 , aws , 네트워크 |
47 |
리눅스 표준 스트림과 리다이렉션, 파이프 |
운영체제 , 리눅스 |
48 |
🖋 우테코에서 찾은 나만의 효과적인 공부법 |
회고 , 글쓰기미션 |
49 |
CORS가 대체 무엇일까? (feat. SOP) |
네트워크 , HTTP |
50 |
Spring, MySQL과 함께한 첫 AWS 배포 경험기 🗺️ |
데브옵스 , 클라우드 , aws |
51 |
수직 확장(Scale up) vs 수평 확장(Scale out) |
데브옵스 |
52 |
다중 서버 환경에서의 세션 불일치 문제와 해결방법 |
네트워크 , 컴퓨터공학 |
53 |
세션 기반 인증과 토큰 기반 인증 (feat. 인증과 인가) |
네트워크 |
54 |
SQL 중심적인 개발의 문제점 |
객체지향 , ORM , JPA |
55 |
IntelliJ에서 메소드 추출한 메소드의 파라미터에 final 키워드 자동 추가하기 |
달록 , intellij |
56 |
CI/CD (지속적 통합/지속적 제공) |
데브옵스 , CI/CD |
57 |
OAuth 2.0 개념과 동작원리 |
네트워크 , OAuth |
58 |
OpenID(OIDC) 개념과 동작원리 |
네트워크 , OpenID |
59 |
쉘 스크립트와 함께하는 달록의 스프링부트 어플리케이션 배포 자동화 |
데브옵스 , 달록 |
60 |
EC2 환경에서 도커를 활용한 젠킨스 설치하기 |
데브옵스 , 달록 |
61 |
젠킨스를 사용한 달록팀의 지속적 배포 환경 구축기 (1) - 백엔드편 |
데브옵스 , 달록 |
62 |
젠킨스를 사용한 달록팀의 지속적 배포 환경 구축기 (2) - 프론트엔드편 |
데브옵스 , 달록 |
63 |
URI, URL 그리고 URN |
네트워크 , HTTP |
64 |
Git Submodule 알아보기 |
git |
65 |
HTTPS 간단히 알아보기 |
네트워크 , http , https , ssl |
66 |
포워드 프록시와 리버스 프록시 |
네트워크 |
67 |
Nginx와 Let's Encrypt로 HTTPS 웹 서비스 배포하기 (feat. Certbot) |
nginx |
68 |
제 1장. 웹과 네트워크의 기본에 대해 알아보자 |
HTTP , 책읽기 |
69 |
제 2장. 간단한 프로토콜 HTTP |
HTTP , 책읽기 |
70 |
로깅을 System.out.println() 로 하면 안되는 이유 |
로깅 |
71 |
Git 브랜치 전략 (feat. Git Flow, Github Flow) |
git |
72 |
젠킨스 파이프라인 스크립트 형상 관리 |
데브옵스 , 달록 |
73 |
제 3장. HTTP 정보는 HTTP 메시지에 있다. |
HTTP , 책읽기 |
74 |
제 4장. 결과를 전달하는 HTTP 상태 코드 |
HTTP , 책읽기 |
75 |
SSH config를 통해 간편하게 SSH 연결하기 |
운영체제 , 리눅스 |
76 |
젠킨스 빌드 최적화를 향한 여정 |
데브옵스 , 운영체제 , 달록 |
77 |
정적 분석(Static Analysis)이란? |
데브옵스 , 정적분석 |
78 |
코드 커버리지(Code Coverage)란? |
데브옵스 , 코드커버리지 |
79 |
달록의 Jacoco 적용기 (feat. Gradle) |
데브옵스 , 코드커버리지 , jacoco |
80 |
🖋 팀 프로젝트가 나에게 남긴 것 |
회고 , 글쓰기미션 |
81 |
제 5장. HTTP와 연계하는 웹 서버 |
HTTP , 책읽기 |
82 |
분리 인터페이스(Separated Interface) 패턴을 사용하여 시스템간 결합을 느슨하게 설계하기 |
디자인패턴 , DDD , 달록 |
83 |
Spring REST Docs를 사용한 API 문서 자동화 |
spring , rest-docs , 달록 |
84 |
Access Token의 문제점과 Refresh Token |
네트워크 , 인증/인가 |
85 |
Spring Boot와 Redis를 사용하여 Refresh Token 구현하기 |
spring , redis , 인증/인가 |
86 |
IntelliJ에서 자주 사용하는 코드 Live Template으로 템플릿화 하기 |
intellij |
87 |
Spring Data JPA Auditing으로 엔티티의 생성/수정 시각 자동으로 기록 |
spring , jpa |
88 |
무중단 배포 아키텍처와 배포 전략 (Rolling, Blue/Green, Canary) |
데브옵스 , 배포 , 무중단배포 |
89 |
Spring Data JPA에서의 페이지네이션과 정렬 |
spring , jpa |
90 |
Nginx를 사용한 로드밸런싱 환경 구축 |
데브옵스 , 배포 , 로드밸런싱 , nginx |
91 |
Java에서 스트림을 사용한 입출력 (InputStream, OuputStream) |
java |
92 |
Java 문자 변환 및 성능 향상 필터 스트림 |
java |
93 |
스프링에서 HTTP 캐시를 사용하기 위한 여러가지 방법 |
spring , java , http |
94 |
HTTP 캐시 (Cache-Control, 유효성 검증 및 조건부 요청 등) |
네트워크 , http |
95 |
HTTP 캐시 무효화 (Cache Busting) |
네트워크 , http |
96 |
Server-Sent Events 알아보기 (feat. Spring) |
네트워크 , http , spring |
97 |
String 클래스의 equalsIgnoreCase() 메소드 |
java |
98 |
HTTP 서버 구현 미션 트러블 슈팅 (1) - BufferedReader의 무한 대기 이슈 |
tcp , socket , http , java |
99 |
HTTP 서버 구현 미션 트러블 슈팅 (2) - 웹 브라우저는 HTTP 메시지가 끝났다고 알려주지 않는다 |
tcp , socket , http , java |
100 |
달록의 데이터베이스 마이그레이션을 위한 Flyway 적용기 |
데브옵스 , flyway , 달록 |
101 |
톰캣 튜닝 맛보기 - maxConnections, acceptCount, maxThreads |
tomcat |
102 |
문제 해결 능력을 위한 깊이 있는 학습 방법에 대해 |
회고 , 생각 |
103 |
데이터베이스 트랜잭션 격리 수준과 격리 수준에 따른 문제점 |
데이터베이스 |
104 |
자바에서 쓰레드 풀 다뤄보기 |
java , 멀티쓰레딩 , CS |
105 |
Git의 다양한 브랜치 병합 방법 (Merge, Squash & Merge, Rebase & Merge) |
git |
106 |
경쟁상태, 임계영역의 개념과 동기화를 위한 여러 상호배제 기법 (mutex, semaphore, monitor) |
운영체제 |
107 |
이유와 솔루션으로 정리하는 객체지향 생활체조 원칙 |
클린코드 , 객체지향 |
108 |
데이터베이스 인덱스 (1) - 인덱스와 인덱싱 알고리즘 (hash table, b-tree, b+tree) |
데이터베이스 |
109 |
데이터베이스 인덱스 (2) - 클러스터형 인덱스와 비클러스터형 인덱스 |
데이터베이스 |
110 |
서블릿과 서블릿 컨테이너 |
java , servlet |
111 |
자바 리플렉션 (Reflection) 기초 |
java |
112 |
톰캣 튜닝을 위한 달록의 서버 성능 테스트 준비 과정 |
부하테스트 , JMeter , 달록 |
113 |
데이터베이스의 확장성과 가용성을 위한 MySQL Replication |
데이터베이스 , MySQL , 데브옵스 |
114 |
어노테이션 기반 DI 컨테이너 구현하기 |
spring |
115 |
어노테이션 기반 MVC 프레임워크 만들기 |
spring |
116 |
경험 중심 학습을 통한 능동적인 성장 |
생각 |
117 |
데이터베이스 커넥션 풀 (Connection Pool)과 HikariCP |
데이터베이스 , jdbc , hikaricp |
118 |
DB ConnectionPool 적용하기 (feat. JDBC Driver, DataSource, HikariCP) |
java , spring , hikaricp , 데이터베이스 |
119 |
Jenkins와 Nginx로 스프링부트 애플리케이션 무중단 배포하기 |
데브옵스 , 배포 , 무중단배포 , jenkins , nginx |
120 |
고가용성의 웹 서비스를 위한 데이터베이스 클러스터링 |
데이터베이스 , 데브옵스 |
121 |
데이터베이스 레플리케이션을 통한 쿼리 성능 개선 (feat. Mysql, SpringBoot) |
spring , mysql , 데이터베이스 |
122 |
고가용성을 확보하기 위한 아키텍처 설계 |
데브옵스 , 아키텍처 |
123 |
스프링 트랜잭션 동기화 및 추상화 |
spring , jdbc |
124 |
JDBC 라이브러리 구현하기 |
spring , jdbc |
125 |
대체 왜 DataSource 라우팅이 안되는거야!? (feat. OSIV) |
jpa , spring |
126 |
젠킨스 분산 빌드 아키텍처 구축 |
jenkins |
127 |
🖋 내가 꿈꾸는 프로그래머로서의 삶 - 다시 써보는 우아한테크코스 지원서 |
회고 , 글쓰기미션 |
128 |
JPA의 낙관적 락을 사용한 동시성 이슈 해결 |
jpa , 데이터베이스 , 데이터베이스 , 트러블슈팅 |
129 |
[가상면접 사례로 배우는 대규모 시스템 설계 기초] Chap01. 사용자 수에 따른 규모 확장성 |
데브옵스 , 아키텍처 |
130 |
경쟁 조건의 두 가지 형태: Read-Modify-Write, Check-Then-Act |
동시성 , 경쟁조건 , java |
131 |
MySQL 8.0의 공유 락(Shared Lock)과 배타 락(Exclusive Lock) |
데이터베이스 , mysql |
132 |
JPA의 낙관적 락과 비관적 락을 통해 엔티티에 대한 동시성 제어하기 |
jpa |
133 |
글로벌 트랜잭션 (feat. JTA, 2PC) |
spring , 트랜잭션 |
134 |
쿼리 튜닝 관점에서의 저장 매체와 랜덤 I/O, 순차 I/O |
컴퓨터공학 |
135 |
MySQL에서 B-Tree 인덱스를 통해 데이터를 읽어오는 방법 (인덱스 스캔) |
데이터베이스 , mysql |
136 |
MySQL 8.0의 레플리케이션 아키텍처와 복제 타입 |
데이터베이스 , mysql |
137 |
스프링 로컬 캐시를 사용한 외부 캘린더 API 호출 최적화 |
캐시 , 성능개선 |
138 |
MySQL 레플리케이션 토폴로지 |
데이터베이스 , mysql |
139 |
[가상면접 사례로 배우는 대규모 시스템 설계 기초] Chap07. 분산 시스템을 위한 유일 ID 생성기 설계 |
데브옵스 , 아키텍처 |
140 |
[가상면접 사례로 배우는 대규모 시스템 설계 기초] Chap08. URL 단축기 설계 |
데브옵스 , 아키텍처 |
141 |
Redis로 분산 락을 구현해 동시성 이슈를 해결해보자! |
동시성 , java , redis , 분산락 |
142 |
분산 환경에서 Redis pub/sub을 활용한 로컬 캐시 동기화 |
redis , 캐시 |
143 |
무중단 배포 중 구버전 프로세스를 그냥 종료해도 괜찮을까? (feat. Kill, Graceful Shutdown) |
무중단배포 ,unix ,spring |
144 |
데이터베이스 파티셔닝과 샤딩 |
데이터베이스 |
145 |
Elasticsearch는 왜 검색속도가 빠를까? - Inverted Index |
엘라스틱서치 |