- Payment System 설계
- Toss Payments 결제 연동
- Payment Service 데이터 모델링
- 가상의 Checkout 기능 구현
- 결제 승인 기능 구현
- 결제 승인 에러 핸들링 (feat: Retry, Timeout)
- 결제 복구 서비스 (feat: Bulk Head, Parallel Processing)
- Confluent Kafka 연동
- 결제 승인 메시지 발행 (feat: Transactional Outbox Pattern, Apache Kafka)
- 신뢰성 있게 카프카를 사용하는 방법
- Wallet Service 구축
- Wallet Service 동시성 제어 (feat: Optimistic Locking)
- Wallet Service 메시지 처리와 전달 보장 (feat: Kafka Transaction)
- Wallet Service 신뢰성 향상 (feat: Dead Letter Queue)
- Ledger Service 구축 (feat: Double-Entry Ledger, Trigger)
- 결제 완료 기능 구축
- 재고 감소 로직 작성
- Synchronized 이용해보기
- Pessimistic Lock 활용해보기
- Optimistic Lock 활용해보기
- Named Lock 활용해보기
- Redis 라이브러리 알아보기
- Lettuce를 작성하여 재고 감소 로직 작성하기
- Redisson 을 활용하여 재고 로직 작성하기
- 라이브러리 장단점
- Mysql과 Redis 비교하기
- 쿠폰 발급 로직 작성
- Redis를 활용하여 문제 해결하기
- Kafka를 활용하여 문제 해결하기
- Producer 사용하기
- Consumer 모듈 추가하기
- Consumer 사용하기
- 발급 가능한 쿠폰 개수를 1인당 1개로 제한하기
- 쿠폰을 발급하다가 에러가 발생하면 어떻게 하나요?
- JDK, IntelliJ, Visual Studio Code 설치
- Google Cloud Platform(GCP) 계정 생성, 인스턴스 만들기
- Docker Desktop 설치
- CPU를 극단적으로 사용하는 애플리케이션 만들기
- 스트레스 테스트 툴로 성능 측정하기
- Dockerized 애플리케이션 GCP에 배포하기
- jenkins를 이용해서 배포하기
- 무중단 배포를 위한 환경 이해하기
- nginx를 통한 로드밸런싱 구성
- 서버를 늘려서 성능 측정하기
- 쉬는 시간 - 후배들에게 받았던 질문 (1)
- Git, Sourcetree 설치
- Sourcetree로 쉽게 Git 배워보기
- GitHub Webhook과 jenkins로 배포 자동화하기
- 머지할 때 발생하는 충돌(conflict) 해결하기
- 실무에서 유용한 Git 꿀팁
- I/O bound 애플리케이션도 서버를 늘리면 성능을 올릴 수 있을까?
- DB를 이용한 한줄 게시판 만들기
- 페이징과 글번호/글내용으로 검색 기능 만들기
- 스트레스 테스트 툴로 성능 측정하기
- 서버가 죽는 이유와 Message Queue를 도입하여 얻을 수 있는 장점
- RabbitMQ 도입과 글 목록 캐싱
- 스트레스 테스트 - 글 작성 요청은 실패하지 않을까?
- 검색 요청은 여전히 느리다
- 쉬는 시간 - 후배들에게 받았던 질문 (2)
- ES 클러스터 구성
- ES에 데이터 적재 후 검색하기
- 검색 성능 테스트와 샤드, 레플리카
- I/O bound 애플리케이션에서의 기술적 선택 요소
- Kubernetes
- GCP 같은 클라우드 서비스에서 제공해주는 다양한 기능
- Process & Thread
- Parallel & Concurrent
- Context Switch
- CPU Bound & I/O Bound
- 사용자 모드 & 커널 모드
- 사용자 수준 스레드 & 커널 수준 스레드
- 스레드 생성
- 스레드 실행 및 종료 – 1
- 스레드 실행 및 종료 – 2
- 스레드 생명주기와 상태
- sleep()
- join()
- interrupt() - 1
- interrupt() - 2
- name() / currentThread() / isAlive()
- Priority
- 스레드 예외처리 - UncaughtExceptionHandler
- 스레드 중지 – flag variable vs interrupt() - 1
- 스레드 중지 – flag variable vs interrupt() - 2
- 사용자 스레드 vs 데몬 스레드
- ThreadGroup
- ThreadLocal - 1
- ThreadLocal -2
- 싱글 스레드 & 멀티 스레드
- 동기화와 CPU 관계
- Critical Section
- 안전한 스레드 구성 - 1
- 안전한 스레드 구성 - 2
- Mutual Exclusion - 상호 배제
- Semaphore - 세마포어 - 1
- Semaphore - 세마포어 - 2
- Monitor - 모니터 - 1
- Monitor - 모니터 - 2
- SpinLock & Busy Waiting
- synchronized 기본
- synchronized 메서드 동기화
- synchronized 블록 동기화
- synchronized 특성
- 스레드 간 협력 - wait() & notify()
- volatile - 메모리 동기화
- Deadlock - 교착상태 - 1
- Deadlock - 교착상태 - 2
- Lock & ReentrantLock - 1
- Lock & ReentrantLock - 2
- ReentrantLock API
- ReadWriteLock & ReentrantReadWriteLock
- ReadLock & WriteLock
- Lock 공정성
- ReentrantReadWriteLock 재 진입성
- Condition - 1
- Condition - 2
- CAS (Compare and Swap) 이해와 활용 - 1
- CAS (Compare and Swap) 이해와 활용 - 2
- Atomic Variables - 단일연산변수 - 1
- Atomic Variables - 단일연산변수 - 2
- Atomic*FieldUpdater - 단일연산필드업데이터
- CountDownLatch
- CyclicBarrier
- 스레드 풀 이해와 구현
- Executor
- Runnable and Callable
- Future & Callback 이해
- Future 구조 및 API - 1
- Future 구조 및 API - 2
- Future 구조 및 API - 3
- ExecutorService API- 스레드 풀 실행 및 관리
- ExecutorService API - 스레드 풀 중단 및 종료 - 1
- ExecutorService API - 스레드 풀 중단 및 종료 - 2
- ExecutorService API - 다중 작업 처리
- ScheduledExecutorService
- Executors - 고정 크기 스레드 풀 생성
- Executors - 유동 및 단일 크기 스레드 풀 생성
- Executors - 스케줄링 스레드 풀 생성
- corePoolSize & maximumPoolSize - 기본 스레드 & 최대 스레드
- keepAliveTime - 스레드 유휴 시간 설정
- BlockingQueue - 블로킹 큐
- RejectedExecutionHandler - 스레드 풀 포화 정책
- ThreadPoolExecutor Hook - 스레드 풀 Hook 메서드
- 생명 주기와 상태 & ThreadPoolExecutor 아키텍처 이해
- 동기 vs 비동기 & Blocking vs Non Blocking (1)
- 동기 vs 비동기 & Blocking vs Non Blocking (2)
- CompletableFuture 개요
- CompletableFuture API 구조
- 비동기 작업 시작 - supplyAsync() & runAsync() - 1
- 비동기 작업 시작 - supplyAsync() & runAsync() - 2
- 비동기 결과 조작 - thenApply()& thenApplyAsync() - 1
- 비동기 결과 조작 - thenApply()& thenApplyAsync() - 2
- 비동기 결과 조작 - thenAccept() / thenRun()
- 비동기 작업 조합 - thenCompose() / thenCombine() - 1
- 비동기 작업 조합 - thenCompose() / thenCombine() - 2
- 비동기 작업 조합 - allOf() & anyOf()
- 비동기 예외처리 - 1
- 비동기 예외처리 - 2
- 비동기 완료 처리 - 1
- 비동기 완료 처리 - 2
- 비동기 대기 / 취소 처리
- ForkJoinPool - 1
- ForkJoinPool - 2
- ForkJoinPool - 3
- Bank 프로젝트 생성
- yml 설정
- 화면설계
- 테이블설계
- User 엔티티 생성
- Account 엔티티 생성
- Transaction 엔티티 생성
- SecurityConfig 기본 설정
- SecurityConfig 직접 테스트
- SecurityConfig Junit 테스트
- 공통DTO 만들기
- 회원가입 서비스 만들기
- 회원가입 서비스 테스트
- 회원가입 서비스 코드 리팩토링
- 회원가입 컨트롤러 만들기
- 회원가입 컨트롤러 유효성검사 AOP 적용
- 회원가입 컨트롤러 정규표현식 실습1
- 회원가입 컨트롤러 정규표현식 실습2
- 회원가입 컨트롤러 정규표현식 DTO 적용
- 회원가입 컨트롤러 테스트
- Jwt 토큰 생성을 위한 세팅
- Jwt 토큰 필터 구현 완료
- Jwt 필터 등록하기
- Jwt 토큰 로그인 실패 로직 처리
- Jwt 인가필터 구현 및 등록완료
- 시큐리티 JWT 코드 리뷰 및 개념잡기
- JwtProcess 테스트
- successfulAuthentication 테스트
- unsuccessfulAuthentication 테스트
- authorization 테스트
- 회원가입 테스트 오류 잡기
- SecurityConfig에 ROLE_ prefix 관련 공식 문서 변경 확인하기
- 계좌등록 서비스 만들기
- 계좌등록 컨트롤러 만들기
- 계좌등록 서비스 테스트
- 계좌등록 컨트롤러 테스트
- 본인계좌목록보기 서비스 만들기
- 본인계좌목록보기 컨트롤러 만들기
- 계좌삭제 서비스 생성 및 테스트
- 계좌삭제 컨트롤러 생성 및 테스트
- @Sql teadown.sql 적용하기
- Jwt토큰 만료시간 버그 잡기
- 계좌입금 서비스 만들기
- 계좌입금 컨트롤러 만들기
- 계좌입금 서비스 테스트
- 서비스 테스트에 관하여 생각해보기
- 계좌입금 컨트롤러 테스트
- 계좌출금 서비스 만들기
- 계좌출금 서비스 테스트
- 계좌출금 컨트롤러 생성 및 테스트
- 계좌이체 서비스 생성
- 계좌이체 서비스 테스트
- 계좌이체 컨트롤러 생성 및 테스트
- Long 타입 테스트
- cors 테스트
- 입출금내역 동적 쿼리 작성
- outer join 하는 이유
- @DataJpaTest 더미데이터 만들기
- @DataJpaTest autoincrement 초기화
- @DataJpaTest 더티체킹
- 동적쿼리 테스트
- fetch join 테스트
- 입출금내역조회 서비스 만들기
- 입출금내역조회 컨트롤러 생성 및 테스트
- 계좌상세보기 서비스, 컨트롤러 생성 및 테스트
- 전체테스트 및 PostMan 확인
- Web Service와 Web Application의 개요
- Web Service 개발 방법 SOAP과 REST의 이해
- OpenAPI 소개
- Spring Boot 개요
- RESTful API 설계 - 사용자 관리 API
- Spring Boot Project 생성
- Spring Boot Project 구조 확인과 실행 방법
- HelloWorld Controller 추가
- HelloWorld Bean 추가
- DispatcherServlet과 프로젝트 동작의 이해
- Path Variable 이용 - 가변 URI 사용
- User 도메인 클래스 생성
- 사용자 목록 조회를 위한 API 구현 - HTTP GET method
- 사용자 등록을 위한 API 구현 - HTTP POST method
- HTTP Status Code 제어
- HTTP Status Code 제어를 위한 Exception Handling
- Spring AOP를 이용한 Exception Handling
- 사용자 삭제를 위한 API 구현 - HTTP DELETE method
- 유효성 체크를 위한 Validation API 사용
- 다국어 처리를 위한 Internationalization 구현 방법
- Response 데이터 형식 변환 - XML format
- Response 데이터 제어를 위한 Filtering
- 프로그래밍으로 제어하는 Filtering - 개별 사용자 조회
- 프로그래밍으로 제어하는 Filtering - 전체 사용자 조회
- Version 관리 - URI를 이용한 버전관리
- Version 관리 - Paramter와 Header를 이용한 버전관리
- Level3 단계의 REST API 구현을 위한 HATEOAS 적용
- Swagger Documentation 구현 - Spring Boot 2.7 사용 ①
- Swagger Documentation 구현 - Spring Boot 2.7 사용 ②
- Swagger Documentation 구현 - Spring Boot 3.1 사용 ①
- Swagger Documentation 구현 - Spring Boot 3.1 사용 ②
- Spring Boot Actuator를 이용한 모니터링 및 Metrics 수집
- HAL Explorer를 이용한 API 테스트
- Spring Security를 이용한 인증 처리
- API 사용을 위한 사용자 인증 처리 구현
- Java Persistence API의 개요
- JPA 사용을 위한 Dependency 추가와 Entity 설정
- Spring Data JPA를 이용한 초기 데이터 생성
- JPA Service 구현을 위한 Controller, Repository 생성
- JPA를 이용한 개별 사용자 상세 조회 - HTTP Get method
- JPA를 이용한 사용자 추가와 삭제 - HTTP POST/DELETE method
- 게시물 관리를 위한 Post Entity 추가와 초기 데이터 생성
- 게시물 조회를 위한 Post Entity와 User Entity와의 관계 설정
- JPA를 이용한 새 게시물 추가 - HTTP POST Method
- Richardson Maturity Model 소개
- RESTful API 설계 시 고려해야 할 사항
- 프로젝트 구성 및 의존성 추가
- 사용자 정의 보안 기능 구현
- Form Login 인증
- Form Login 인증 필터 : UsernamePasswordAuthenticationFilter
- Logout 처리, LogoutFilter
- Remember Me 인증
- Remember Me 인증 필터 : RememberMeAuthenticationFilter
- 익명사용자 인증 필터 : AnonymousAuthenticationFilter
- 동시 세션 제어, 세션 고정 보호, 세션 정책
- 세션 제어 필터 : SessionManagementFilter, ConcurrentSessionFilter
- 권한설정과 표현식
- 예외 처리 및 요청 캐시 필터 : ExceptionTranslationFilter, RequestCacheAwareFilter
- 사이트 간 요청 위조 - CSRF, CsrfFilter
- 위임 필터 및 필터 빈 초기화 - DelegatingProxyChain, FilterChainProxy
- 필터 초기화와 다중 보안 설정
- 인증 개념 이해 - Authentication
- 인증 저장소 - SecurityContextHolder, SecurityContext
- 인증 저장소 필터 - SecurityContextPersistenceFilter
- 인증 흐름 이해 - Authentication Flow
- 인증 관리자 : AuthenticationManager
- 인증 처리자 - AuthenticationProvider
- 인가 개념 및 필터 이해 : Authorization, FilterSecurityInterceptor
- 인가 결정 심의자 - AccessDecisionManager, AccessDecisionVoter
- 스프링 시큐리티 필터 및 아키텍처 정리
- 정적 자원 관리 - WebIgnore 설정
- 사용자 DB 등록 및 PasswordEncoder
- DB 연동 인증 처리(1) : CustomUserDetailsService
- DB 연동 인증 처리(2) : CustomAuthenticationProvider
- 커스텀 로그인 페이지 생성하기
- 로그아웃 및 인증에 따른 화면 보안 처리
- 인증 부가 기능 - WebAuthenticationDetails, AuthenticationDetailsSource
- 인증 성공 핸들러 : CustomAuthenticationSuccessHandler
- 인증 실패 핸들러 : CustomAuthenticationFailureHandler
- 인증 거부 처리 - Access Denied
- 인증 필터 - AjaxAuthenticationFilter
- 인증 처리자 - AjaxAuthenticationProvider
- 인증 핸들러 - AjaxAuthenticationSuccessHandler, AjaxAuthenticationFailureHandler
- 인증 및 인가 예외 처리 - AjaxLoginUrlAuthenticationEntryPoint, AjaxAccessDeniedHandler
- Ajax Custom DSLs 구현하기
- Ajax 로그인 구현 & CSRF 설정
- 스프링 시큐리티 인가 개요
- 관리자 시스템 - 권한 도메인, 서비스, 리포지토리 구성
- 웹 기반 인가처리 DB 연동 - 주요 아키텍처 이해
- 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (1)
- 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (2)
- 웹 기반 인가처리 실시간 반영하기
- 인가처리 허용 필터 - PermitAllFilter 구현
- 계층 권한 적용하기- RoleHierarchy
- 아이피 접속 제한하기 - CustomIpAddressVoter
- Method 방식 개요
- 어노테이션 권한 설정 - @PreAuthorize, @PostAuthorize, @Secured, @RolesAllowed
- AOP Method 기반 DB 연동 - 주요 아키텍처 이해
- AOP Method 기반 DB 연동 - MapBasedSecurityMetadataSource (1)
- AOP Method 기반 DB 연동 - MapBasedSecurityMetadataSource (2)
- AOP Method 기반 DB 연동 - MapBasedSecurityMetadataSource (3)
- AOP Method 기반 DB 연동 - ProtectPointcutPostProcessor
- Querydsl 설정과 검증
- 라이브러리 살펴보기
- H2 데이터베이스 설치
- 스프링 부트 설정 - JPA, DB
- 예제 도메인 모델과 동작확인
- 시작 - JPQL vs Querydsl
- 기본 Q-Type 활용
- 검색 조건 쿼리
- 결과 조회
- 정렬
- 페이징
- 집합
- 조인 - 기본 조인
- 조인 - on절
- 조인 - 페치 조인
- 서브 쿼리
- Case 문
- 상수, 문자 더하기
- 프로젝션과 결과 반환 - 기본
- 프로젝션과 결과 반환 - DTO 조회
- 프로젝션과 결과 반환 - @QueryProjection
- 동적 쿼리 - BooleanBuilder 사용
- 동적 쿼리 - Where 다중 파라미터 사용
- 수정, 삭제 벌크 연산
- SQL function 호출하기
- 순수 JPA 리포지토리와 Querydsl
- 동적 쿼리와 성능 최적화 조회 - Builder 사용
- 동적 쿼리와 성능 최적화 조회 - Where절 파라미터 사용
- 조회 API 컨트롤러 개발
- 스프링 데이터 JPA 리포지토리로 변경
- 사용자 정의 리포지토리
- 스프링 데이터 페이징 활용1 - Querydsl 페이징 연동
- 스프링 데이터 페이징 활용2 - CountQuery 최적화
- 스프링 데이터 페이징 활용3 - 컨트롤러 개발
- 인터페이스 지원 - QuerydslPredicateExecutor
- Querydsl Web 지원
- 리포지토리 지원 - QuerydslRepositorySupport
- Querydsl 지원 클래스 직접 만들기
- H2 데이터베이스 설치
- 스프링 데이터 JPA와 DB 설정, 동작확인
- 예제 도메인 모델과 동작확인
- 순수 JPA 기반 리포지토리 만들기
- 공통 인터페이스 설정
- 공통 인터페이스 적용
- 공통 인터페이스 분석
- 메소드 이름으로 쿼리 생성
- JPA NamedQuery
- @Query, 리포지토리 메소드에 쿼리 정의하기
- @Query, 값, DTO 조회하기
- 파라미터 바인딩
- 반환 타입
- 순수 JPA 페이징과 정렬
- 스프링 데이터 JPA 페이징과 정렬
- 벌크성 수정 쿼리
- @EntityGraph
- JPA Hint & Lock
- 사용자 정의 리포지토리 구현
- Auditing
- Web 확장 - 도메인 클래스 컨버터
- Web 확장 - 페이징과 정렬
- 스프링 데이터 JPA 구현체 분석
- 새로운 엔티티를 구별하는 방법
- Specifications (명세)
- Query By Example
- Projections
- 네이티브 쿼리
- SQL 중심적인 개발의 문제점
- JPA 소개
- 영속성 컨텍스트 1
- 영속성 컨텍스트 2
- 플러시
- 준영속 상태
- 객체와 테이블 매핑
- 데이터베이스 스키마 자동 생성
- 필드와 컬럼 매핑
- 기본 키 매핑
- 단방향 연관관계
- 양방향 연관관계와 연관관계의 주인 1- 기본
- 양방향 연관관계와 연관관계의 주인 2 - 주의점, 정리
- 다대일 [N:1]
- 일대다 [1:N]
- 일대일 [1:1]
- 다대다 [N:M]
- 상속관계 매핑
- Mapped Superclass - 매핑 정보 상속
- 프록시
- 즉시 로딩과 지연 로딩
- 영속성 전이(CASCADE)와 고아 객체
- 기본값 타입
- 임베디드 타입
- 값 타입과 불변 객체
- 값 타입의 비교
- 값 타입 컬렉션
- 기본 문법과 쿼리 API
- 프로젝션(SELECT)
- 페이징
- 조인
- 서브 쿼리
- JPQL 타입 표현과 기타식
- 조건식(CASE 등등)
- JPQL 함수
- 경로 표현식
- 페치 조인 1 - 기본
- 페치 조인 2 - 한계
- 다형성 쿼리
- 엔티티 직접 사용
- Named 쿼리
- 벌크 연산
- JDBC 이해
- JDBC와 최신 데이터 접근 기술
- 데이터베이스 연결
- JDBC 개발 - 등록
- JDBC 개발 - 조회
- JDBC 개발 - 수정, 삭제
- 커넥션 풀 이해
- DataSource 이해
- DataSource 예제1 - DriverManager
- DataSource 예제2 - 커넥션 풀
- DataSource 적용
- 트랜잭션 - 개념 이해
- 데이터베이스 연결 구조와 DB 세션
- 트랜잭션 - DB 예제1 - 개념 이해
- 트랜잭션 - DB 예제2 - 자동 커밋, 수동 커밋
- 트랜잭션 - DB 예제3 - 트랜잭션 실습
- 트랜잭션 - DB 예제4 - 계좌이체
- DB 락 - 개념 이해
- DB 락 - 변경
- DB 락 - 조회
- 트랜잭션 - 적용1
- 트랜잭션 - 적용2
- 트랜잭션 추상화
- 트랜잭션 동기화
- 트랜잭션 문제 해결 - 트랜잭션 매니저1
- 트랜잭션 문제 해결 - 트랜잭션 매니저2
- 트랜잭션 문제 해결 - 트랜잭션 템플릿
- 트랜잭션 문제 해결 - 트랜잭션 AOP 이해
- 트랜잭션 문제 해결 - 트랜잭션 AOP 적용
- 트랜잭션 문제 해결 - 트랜잭션 AOP 정리
- 스프링 부트의 자동 리소스 등록
- 예외 계층
- 예외 기본 규칙
- 체크 예외 기본 이해
- 언체크 예외 기본 이해
- 체크 예외 활용
- 언체크 예외 활용
- 예외 포함과 스택 트레이스
- 체크 예외와 인터페이스
- 런타임 예외 적용
- 데이터 접근 예외 직접 만들기
- 스프링 예외 추상화 이해
- 스프링 예외 추상화 적용
- JDBC 반복 문제 해결 - JdbcTemplate
- 프로젝트 생성
- 라이브러리 살펴보기
- View 환경설정
- 빌드하고 실행하기
- 정적 컨텐츠
- MVC와 템플릿 엔진
- API
- 회원 도메인과 리포지토리 만들기
- 회원 리포지토리 테스트 케이스 작성
- 회원 서비스 개발
- 회원 서비스 테스트
- 컴포넌트 스캔과 자동 의존관계 설정
- 자바 코드로 직접 스프링 빈 등록하기
- 회원 웹 기능 - 홈 화면 추가
- 회원 웹 기능 - 등록
- 회원 웹 기능 - 조회
- H2 데이터베이스 설치
- 순수 JDBC
- 스프링 통합 테스트
- 스프링 JdbcTemplate
- JPA
- 스프링 데이터 JPA
- AOP가 필요한 상황
- AOP 적용
- 스프링이란?
- 좋은 객체 지향 프로그래밍이란?
- 좋은 객체 지향 설계의 5가지 원칙(SOLID)
- 객체 지향 설계와 스프링
- 회원 도메인 설계
- 회원 도메인 개발
- 회원 도메인 실행과 테스트
- 주문과 할인 도메인 설계
- 주문과 할인 도메인 개발
- 주문과 할인 도메인 실행과 테스트
- 새로운 할인 정책 개발
- 새로운 할인 정책 적용과 문제점
- 관심사의 분리
- AppConfig 리팩터링
- 새로운 구조와 할인 정책 적용
- 좋은 객체 지향 설계의 5가지 원칙의 적용
- IoC, DI, 그리고 컨테이너
- 스프링으로 전환하기
- 스프링 컨테이너 생성
- 컨테이너에 등록된 모든 빈 조회
- 스프링 빈 조회 - 기본
- 스프링 빈 조회 - 동일한 타입이 둘 이상
- 스프링 빈 조회 - 상속 관계
- BeanFactory와 ApplicationContext
- 다양한 설정 형식 지원 - 자바 코드, XML
- 스프링 빈 설정 메타 정보 - BeanDefinition
- 웹 애플리케이션과 싱글톤
- 싱글톤 패턴
- 싱글톤 컨테이너
- 싱글톤 방식의 주의점
- @Configuration과 싱글톤
- @Configuration과 바이트코드 조작의 마법
- 컴포넌트 스캔과 의존관계 자동 주입 시작하기
- 탐색 위치와 기본 스캔 대상
- 필터
- 중복 등록과 충돌
- 다양한 의존관계 주입 방법
- 옵션 처리
- 생성자 주입을 선택해라!
- 롬복과 최신 트랜드
- 조회 빈이 2개 이상 - 문제
- @Autowired 필드 명, @Qualifier, @Primary
- 애노테이션 직접 만들기
- 조회한 빈이 모두 필요할 때, List, Map
- 자동, 수동의 올바른 실무 운영 기준
- 빈 생명주기 콜백 시작
- 인터페이스 InitializingBean, DisposableBean
- 빈 등록 초기화, 소멸 메서드
- 애노테이션 @PostConstruct, @PreDestroy
- 빈 스코프란?
- 프로토타입 스코프
- 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문제점
- 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결
- 웹 스코프
- request 스코프 예제 만들기
- 스코프와 Provider
- 스코프와 프록시
- 객체를 표현하자1(JSON)
- JSON API 활용하기(Gson)
- 객체를 표현하자2(JSON)
- JSON API 활용하기(JSON-Java)
- 네이버 클라우드 플랫폼의 지도 API 서비스 등록
- Java Geocoding(위도, 경도 추출)
- Java Geocoding(지도 이미지 생성하기)
- 위도와 경도를 추출하여 지도 보여주기(GUI 버전)
- Jsoup API 활용하기
- 웹 페이지 Crawling 하기(HTML Parsing)
- 웹 페이지 Crawling 하기(리소스 다운로드)
- 웹 페이지 Crawling 하기(GUI 버전)
- Excel 파일 Reading 하기
- Excel에 image 저장하기
- Excel에서 cell의 DataType 알아보기
- 도서정보를 입력하여 ISBN, Image 검출하기
- 도서정보를 활용 ISBN, Image 검출하여 Excel에 저장하기
- iText API를 이용한 PDT table만들기
- iText API를 이용한 PDT에 Paragraph(단락, 문단, 절) 만들기
- iText API를 이용한 PDF에 image 삽입하기
- iText API를 이용한 PDF에 image 크기조절
- Excel에서 데이터를 읽어서 PDF로 만들기
- Mosquitto™ MQTT broker 설치 및 서버구동
- Java를 활용하여 DHT11 센서 데이터 모니터링 및 LED 제어하기
- Java와 MQTT를 연동하여 데이터를 전송, 수신하는 시연 동영상
- Arduino(WeMos DS1)와 연동하여 제어하는 시연 동영상
- Socket(소켓)이 만들어 지는 과정(TCP 3-way Handshake)
- Java에서 Socket(소켓) 만들기(ECHO)
- Socket(소켓)을 이용한 Multi-Chatting 만들기