- 스프링 입문
- 스프링이란?
- 좋은 객체 지향 프로그래밍이란?
- 좋은 객체 지향 설계의 5가지 원칙
- 객체 지향 설계와 스프링
- 스프링 핵심 원리 - 기본편
- Web Server vs WAS
- Maven vs Gradle
- 테스트코드는 무엇이고 왜 작성해야 할까요?
- 단위테스트 vs 통합테스트 vs 인수테스트
- spring boot의 가장 큰 장점 Auto Configuration이란? 동작 방식은?
- 서블릿(Servelet)이란?
- 객체 지향 프로그래밍의 4대 특성 (캡! 상추다)
- 필터(filter) vs 인터셉터(interceptor)
- properteis vs yml
- 스프링 AOP(Aspect Oriented Programming)
- 생성자주입을 선택해라!
- 상태검증 vs 행위 검증
- 스프링의 등장과 스프링 부트
- 객체의 종류
- @Transactional에 대해서 알아보자
- 스프링 트랜잭션 전파에 대해 알아보자
- 트랜잭션 전파 옵션을 이용해서 복구하기
- @Transactional을 사용할때 어떤 점을 주의할까?
- Junit5은 무엇일까?
- 객체의 결합도와 응집도
- 스프링의 삼각형은 무엇일까?
- ExceptionHandler와 ControllerAdvice를 알아보자
- JDK Dynamic Proxy vs CGLIB Proxy
- 스프링에서 Conditional 어노테이션이란?
- 레이어드 아키텍처(Layerd Architecture)와 테스트
- @NotNull @NotBlank @NotEmpty를 뭐가 다를까?
- Validation 책임과 범위는 어떻게 가져가야할까?
- Kafka vs RabbitMQ vs Redis
- JPA를 사용하는 이유가 무엇일까?
- DTO는 어느 레이어까지 사용하는 것이 좋을까?
- 더, 자바, 코드를 조작하는 다양한 방법
- Short-circuit이 런타임 오류를 방지해준다?
- 해시충돌 발생시 JAVA에서는 어떻게 처리할까?
- equals() 를 오버라이드 하면 hashCode()도 같이 재정의 해야한다?
- 컴파일언어 vs 인터프리터언어 자바의 정체가 무엇인가?
- Optional – orElse() vs orElseGet()
- 상속 vs 컴포지션 - 객체 간의 관계를 나타내는 두 가지 방법
- 인터페이스 vs 추상클래스 (자바8 이후의 변화)
- 에러와 예외 (Checked exception vs Unchecked exception)
- System.out.println 메소드는 실무에서 절대 사용하지마라
- Logging에 대해 알아보자
- Log4j란?
- log4j2 vs logback
- 자바의 리스트들은 어떻게 동작할까?(ArrayList, LinkedList)
- Sync(동기)vs Async(비동기) / Blocking vs Non-blocking
- 자바에서 transient 는 어떤 키워드 인가?
- 자바의 IO와 (New)NIO란?
- try-with-resources로 쉽게 자원해제하기
- 자바8에 추가된 Stream에 대해 알아보자
- ParallelStream은 항상 Stream보다 성능이 좋을까?
- 자바에서 동시성 문제를 해결하기 위한 방법
- Hashmap vs Hashtable vs ConcurrentHashMap
- GC(GarbageCollection)는 어떻게 동작하며 왜 필요할까?
- GC 방식에는 어떤 것들이 있을까?
- JDK15에서 정식으로 인정된 ZGC
- String은 불변이다?
- Statement vs PreparedStatement
- 멀티프로세스 vs 멀티스레드
- 어댑터패턴(Adapter Pattern)이란?
- 프록시패턴(Proxy Pattern)이란?
- 데코레이터패턴(Decorator Pattern)이란?
- 싱글톤패턴(Singletone Pattern)이란?
- 전략패턴(Strategy Pattern)이란?
- 팩토리메소드패턴(Factorymethod Pattern)이란?
- Java 에서 싱글톤패턴 구현방식
- static block 무엇이고 언제 사용할까?
- 어노테이션을 사용하는 이유와 효과에 대해 알아보자
- 자바의 람다식은 왜 등장했을까?
- 자바의신 vol1
- 자바의신 vol2
- 모든 개발자를 위한 HTTP 웹 기본 지식
- HTTP 상태 코드를 알아보자
- OAuth2.0 개념과 동작에 대해 알아보자
- 인증(Authentication)과 인가(Authorization)
- JWT(JSON Web Token)란?
- 세션불일치 현상은 무엇이고 어떤 방법으로 해결할 수 있을까?
- 트랜잭션이 만족해야 하는 ACID
- 트랜잭션 Isolation level
- JOIN의 종류(INNER, OUTER, CROSS, SELF JOIN)
- Mybatis #과 $차이
- 낙관적인 락 vs 비관적인 락
- MYSQL SELECT FOR UPDATE
- MySQL Index에 대해 알아보자
- Redis란?
- 공유 락(shared lock) vs 배타 락(exclusive lock)
- MySQL 실행계획이란?
- SELECT * 을 쓰면 안되는 이유
- 테이블마다 id 칼럼을 PK로 사용한 이유는 무엇일까?
- MySQL 아키텍쳐
- SQL Mapper vs ORM 기술
- 운영환경에서 안전하게 테이블 칼럼을 추가하려면 어떤 방법이 좋을까?
- 명명규칙
- 버전관리(Semantic Versioning)
- 코딩으로 학습하는 리팩토링
- 라이브러리 vs 프레임워크
- 패스워드 암호화를 어떤 방식으로 하면 좋을까?
- 젠킨스를 통한 CI/CD 구성하기 - CI
- 젠킨스를 통한 CI/CD 구성하기 - CD
- Scale out시 세션불일치 방지를 위한 Redis 선정과정
- Auditing을 고려한 테이블 설계 과정
- Redis 캐시 적용으로 성능 개선하기
- RabbitMQ 메세지큐 적용으로 성능 개선하기
- 대용량 트래픽 처리를 위한 경매 기능 최적화
- 브라우저에 URL을 입력하면 어떤 일이 벌어질까?
- 카프카(kafka) 조금 아는척하기 - 1
- 카프카(kafka) 조금 아는척하기 - 2
- 카프카(kafka) 조금 아는척하기 - 3
- [IntelliJ] 자바 구글 코딩 컨벤션 적용하기
- [IntelliJ] Dependency Analyzer & Dependency Diagram 의존성 확인하기
- Github 저장소에 Repository Rule 제약하기
- 파일마다 EOL(EndOfLine) 넣어야 하는 이유는 무엇일까?
- Github Actions으로 Sonar Cloud와 Slack 알림 설정하기
- 댓글 알고리즘으로 무한 depth 구현하기
- 좋아요 수를 이용해 동시성 처리 비교하기
- 단축 URL을 사용하는 이유는 무엇이고 구현해보자
- 비밀번호 재설정링크로 이메일 전송 기능 구현하기