| 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 |
엘라스틱서치 |