5. 기타

[쌍용교육센터] AWS & Docker를 활용한 Java Full-Stack 개발자 양성과정 수강 후기 — 1편

lhk9311 2026. 4. 29. 21:24

[쌍용교육센터] AWS & Docker를 활용한 Java Full-Stack 개발자 양성과정 수강 후기 — 1편

목차

1. 수강 계기
1-1. 기술스택

2. 배운 내용 정리
2-1. 기초 백엔드 & DB (1.5개월)
2-2. 기초 프론트엔드 (4주)
2-3. Servlet/JSP 기반 MVC 패턴 실습 및 팀 프로젝트 (1.5개월)
2-4. UML & DB 모델링
2-5. GitHub

 

수강 계기

직업훈련명 : AWS와 Docker & Kubernetes를 활용한 Java Full-Stack 개발자 양성과정
훈련기관 : 쌍용교육센터
훈련기간 : 2025-09-11 ~ 2026-03-31(총 6개월 반)
수강 계기 : 재직중이던 IT회사에서 경영지원 업무를 수행하며 개발 직군에 대한 관심이 생김. 당시 약 10명의 개발자에게 직무 전환에 대한 의견을 물어봤는데 단 1명(SAP개발자)만이 긍정적으로 대답해주었음. 하지만 직접 경험해보고 판단하고 싶기도 했고 퇴사 이후 실업급여 수급 기간 동안 직업훈련을 병행할 수 있다는 점 때문에 지원하게됨. 학원에서는 간단한 ZOOM 인터뷰를 통해 입과 진행하였음.
 

 
당시 수강한 직업훈련 정보는 상기 이미지에서 확인할 수 있음.
시간이 지날수록 기억의 휘발이 있는 것 같아 수강기간 동안 배운 내용에 대해 간단하게 기록해보고자 함.


 

기술스택

구분 기술
Language Java
Backend JSP/Servlet, Spring Boot, Spring Security, MyBatis
Frontend HTML, CSS, JavaScript, jQuery, Bootstrap
Database Oracle
Devops Docker, AWS(EC2), GitHub Actions(CI/CD), Jenkins
Modeling eXERD, StarUML

 

1) 기초 백엔드 & DB (1.5개월) : Java 콘솔 ->  Oracle  -> JDBC

1- 1. [Java] 콘솔에서 회원관리 CRUD 구현

개발환경
IDE : Eclipse IDE 2023
JDK : JDK 17

 
Java 학습의 첫 단계는 서버 및 DB 없이 순수 Java(JVM)만으로 콘솔에서 CRUD 구현하는 것이었음. Member 객체를 배열에 저장하고, Scanner로 입력을 받아 회원가입, 조회, 종료 기능을 만들고, 중복 아이디 검사를 for문으로 구현함. 이후에 Spring이 자동화한 것들을 이 단계에서 직접 구현하였다고 보면 됨.

콘솔 Java Spring
배열로 데이터 저장 JPA / Repository
Scanner로 입력 받기 @RequestParam / @RequestBody
switch로 기능 분기 @GetMapping / @PostMapping
for문 중복검사 existsById() / @Column(unique)

 
※ existsById() --> Spring Data JPA 메서드.


1-2. [Oracle] SQL로 데이터 가공하기

개발환경
DB : Oracle XE 21c
DB 클라이언트 : SQL Developer

 
SQL은 DB 테이블에서 데이터를 가져온 뒤 (JOIN 등 사용하여 연결) 조건 등을 사용하여 원하는 형태로 가공하는 것임.
 
■ DECODE / CASE WHEN - 조건 사용하기
: Java 코드에서 if-else로 처리하던 조건 분기를 SQL 안에서 처리하는 방법을 익힘. 단순 값 치환은 DECODE, 범위 조건이 필요할 때는 CASE WHEN을 사용함.

# 주민등록 -> 성별 변환
SELECT employee_id, last_name, jubun,
       DECODE(SUBSTR(jubun,7,1),
                      '1','남',
                      '2','여',
                      '3','남',
                      '4','여',
                      '기타') AS gender
FROM employees;

주민등록번호의 7번째 자리 기준으로 성별 컬럼이 도출되었다는 것을 알 수 있음.(DECODE 사용)

 
 
■ LAG / LEAD - 게시판에서 이전/ 다음 데이터 가져오기
: 게시판 상세 페이지에서 이전글, 다음글 구현할 때 LAG / LEAD 윈도우 함수 사용함.

SELECT 이전글번호, 이전글제목, 글번호, 글제목, 다음글번호, 다음글제목
FROM (
    SELECT LAG(boardno) OVER(ORDER BY boardno DESC) AS 이전글번호 # 예제의 편의상 한글 alias 사용함
         , LAG(subject) OVER(ORDER BY boardno DESC) AS 이전글제목
         , boardno, subject, content
         , LEAD(boardno) OVER(ORDER BY boardno DESC) AS 다음글번호
         , LEAD(subject) OVER(ORDER BY boardno DESC) AS 다음글제목
    FROM tbl_board
) V
WHERE boardno = 3;

 

tbl_board 테이블 조회해보면, 게시글 번호(boardno) 기준 최신글 순으로 정렬된 데이터가 출력됨.

 
 
■ 서브쿼리 / Inline View -  데이터 가공하기

[퀴즈] employees 테이블에서 모든 사원들에 대해 부서번호, 사원번호, 사원명, 주민번호, 성별, 만나이, 월급, 입사일자, 정년퇴직일, 정년까지근무개월수, 퇴직금 을 나타내세요.

 
처리 흐름 : employees 테이블(원본) -> Inline View로 1차 가공 -> WITH 절로 2차 가공 -> 최종 SELECT 

퀴즈에 대한 정답은 상기 이미지로 갈음함. (생년월일 기준으로 만나이 계산 등)

 


1-3. [JDBC] Oracle DB와 연결한 CRUD 구현

개발환경
IDE : Eclipse IDE 2023
JDK : JDK 17
DB : Oracle XE 21c
DB 클라이언트 : SQL Developer
JDBC 드라이버 : ojdbc8.jar

 
Java 콘솔에서 배열로 구현했던 회원관리를 JDBC로 Oracle DB와 연결하여 회원관리 + 게시판 구현함. eclipse 콘솔에서 로그인 후 게시판 글쓰기 진행하면, 데이터가 Oracle DB에 INSERT되는 것 까지 확인 가능. (JDBC = JAVA + Oracle 연결)

ojdbc8.jar → Oracle 드라이버 파일 (Java가 Oracle 인식하게 해줌)
MyDBConnection.java → ojdbc8.jar 이용해서 실제 Connection 생성
MemberDAO_imple.java → MyDBConnection.getConn() 으로 Connection 가져와서 SQL 실행

 
※ MYDBConnection 클래스 : 커넥션을 매번 생성하지 않고 재사용하기 위한 유틸 클래스임. 이후 Spring에서는 DataSource와 Connection Pool(HikariCP)이 이 역할을 대체함.
 
실제 Java - Oracle 연결하는 코드 2줄

// 1. ojdbc8.jar 안의 OracleDriver 클래스 로드
Class.forName("oracle.jdbc.driver.OracleDriver");

// 2. 실제 Oracle 접속
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "JDBC_USER", "sistsix");

콘솔에서 글 목록 보기 가능
오라클 DB와 연결됨.


 

2) 기초 프론트엔드 (4주) : HTML/CSS -> JavaScript -> JQuery -> BootStrap

개발환경
IDE : Eclipse IDE 2023
브라우저 : Chrome

 
백엔드 개발에 앞서 화면 구성의 기초를 익히는 과정이었음. HTML/CSS로 레이아웃과 스타일링을 배웠고, JavaScript와 jQuery로 동적 동작을 구현하는 방법을 학습함. 마지막으로 BootStrap을 통해 반응형 웹의 개념을 익힘. 이후 JSP와 연동할 때 기본적인 화면을 직접 구성할 수 있는 수준으로 활용함.
 
2-1) HTML/CSS :퀴즈 실습으로 Daum 포털, 네이버 스타블로그 레이아웃을 HTML/CSS로 클론하는 과제를 수행함.

2-2) JavaScript : DOM 조작, 이벤트 처리 등 JS 기초를 학습함. 퀴즈 실습으로 타이머 카운트다운, 슬라이드 전환, 제출 후 취소 불가 처리 등을 JavaScript로 구현한 온라인 시험 페이지를 제작함.

2-3) JQuery : JavaScript 문법을 더 간결하게 작성할 수 있게 하는 라이브러리. 예를 들어 바닐라 JS의document.querySelectorAll() 을 $() 로 축약하는 방식으로 동일한 동작을 더 짧은 코드로 구현할 수 있음.

2-4) BootStrap : Bootstrap 4.6.2 사용하여 미리 정의된 클래스를 활용해 반응형 레이아웃을 빠르게 구성하는 방법을 익힘. 별도의 css 작성없이 클래스 조합만으로 레이아웃을 구성할 수 있음. 실습으로 index, 로그인, 회원가입, 게시판 화면을 제작하였음.


 

3) JSP/Servlet 기반 MVC 패턴 실습 및 팀프로젝트 (1.5개월) 

개발환경
IDE : Eclipse IDE 2023
JDK : JDK 17
Server : Apache Tomcat 10.1
Database : Oracle XE 21c
DB 클라이언트 : SQL Developer
Frontend : HTML, CSS, JavaScript, jQuery, Bootstrap
외부 API : Naver/Kakao OAuth2, CoolSMS, Chart.js
보안 : SHA-256, AES-256, Gmail SMTP (OTP

 
3-1) JSP(View)
JSP는 HTML 기반의 화면 출력 담당으로, 서버에서 가공한 데이터를 EL/JSTL로 표현함. 순수 Java 로직은 최대한 배제하고 "출력만 한다"는 원칙을 따름.

구성요소 역할
EL 서버가 넣어준 attribute 값 출력 ${member.name}
JSTL 조건 분기 / 반복 처리 <c:if>, <c:forEach>
지시어 페이지 설정 / 파일 포함 / 태그 라이브러리 선언 <%@ page %>, <%@ taglib %>

 
* 웹 요청 방식 3가지

1. <form action> → 데이터를 서버에 전송
2. <a href> → 페이지 이동
3. location.href → JS로 강제 이동 (Ajax 제외)

 
* JS와 JSP 연동 방식

로그인 예시 (form + JS submit)
JSP (form 태그, type="button") → JS (유효성 검사 → frm.submit()) → Servlet

아이디 찾기 예시 (form + type="submit")
JSP (form 태그, type="submit") → 자동으로 Servlet에 전송

3-2) Servlet (Controller)
Servlet은 브라우저 요청을 받아 파라미터를 꺼내고, 로직을 처리한 뒤 다음 JSP를 결정하는 역할. Spring MVC에서 @Controller가 대체하는 부분임.

// 1. 파라미터 꺼내기
String userid = request.getParameter("userid");

// 2. DTO 또는 Map에 담기
MemberDTO member = new MemberDTO();
member.setUserid(userid);

// 3. DAO 호출
int result = mdao.registerMember(member);

// 4. 결과를 JSP에 전달
request.setAttribute("message", "회원가입 성공");

// 5. JSP로 이동
super.setRedirect(false);
super.setViewPage("/WEB-INF/msg.jsp");

 
Servlet → Spring MVC 대응표는 하기와 같음.

Servlet Spring MVC
request.setAttribute model.addAttribute
setRedirect(false) return "viewName"
setRedirect(true) return "redirect:/url"
setViewPage ViewResolver가 자동 처리

3-3) DAO (Model)
DAO는 DB와 직접 통신하는 계층으로, SQL을 실행하고 결과를 Java 객체로 변환하여 반환함.
 
* 반환값 결정 기준

DB 작업 반환 타입 비고
INSERT / UPDATE / DELETE int 성공 시 1, 실패 시 0
SELECT (1건) DTO 또는 null 로그인, 아이디 찾기
SELECT (N건) List<DTO> 목록 조회, 페이징

 
* 메서드 구조

// DAO 메서드 구조 (4단계)
conn = ds.getConnection();                     // ① DB 연결
pstmt = conn.prepareStatement(sql);            // ② SQL 준비
pstmt.setString(1, member.getUserid());        // ③ 파라미터 매핑 (Java → DB)
rs = pstmt.executeQuery();                     // ④ SQL 실행

// 컬럼 매핑 (DB → Java)
if(rs.next()) {
    dto.setUserid(rs.getString("userid"));
}

 


3-4) FrontController 패턴 
모든 요청을 FrontController 하나가 받아 각 컨트롤러에 위임하는 구조를 직접 구현함. 이는 Spring MVC의 DispatcherServlet이 하는 역할과 동일함. Servlet이 URL마다 1개씩 존재하면 공통처리(로그인 체크, 페이지 이동 등)가 중복되는 문제를 FrontController 패턴으로 해결하는 원리를 익힘.

InterCommand (interface) → execute() 규약 정의
                               ↑
AbstractController (abstract) → 페이지 이동 공통 변수 (isRedirect, viewPage)
                               ↑
각 Controller (concrete) → 실제 요청 처리

 
전체 요청 흐름은 하기와 같음.

브라우저 (/index.up)
→ FrontController (*.up 전부 수신)
→ command.properties에서 URL ↔ Controller 매핑
→ 해당 Controller.execute() 호출
→ DAO 호출 (필요 시)
→ setViewPage / setRedirect 결정
→ JSP 렌더링 → 브라우저 응답

 

출처 : 클로드 코드

 
실습으로 구현한 주요 기능으로는 회원가입/ 로그인(아이디 저장) / 로그아웃 / 회원탈퇴 / 아이디, 비밀번호 찾기(메일 인증) / 회원정보 수정 / 코인 충전(아임포트 결제) / 상품 목록 조회(더보기/스크롤) / 장바구니 / 주문(주문 완료 메일 발송) / 상품 상세(좋아요. 싫어요, 캐러셀, 첨부파일 다운로드, 후기 CRUD) / 매장 찾기 / 주문 통계 차트 / 관리자 페이지(회원 목록 보기, 페이징) 등이 있음.
 
3-5) 세미프로젝트 - 쇼핑몰 (팀 프로젝트)
진행일정 : 2025/11/28 - 2025/12/26
담당 파트 : 회원 / 마이페이지 / 관리자 중 회원 관련.
 
MVC 실습 기반으로 팀 단위로 진행한 쇼핑몰 프로젝트. FrontController 패턴의 MVC 구조를 유지하면서 실제 서비스 수준의 기능을 구현하는 것을 목표로 하였음.
 
깃허브, ppt(코드설명), 시연영상 링크 하기에 첨부함.
 
https://github.com/lhk9311/SemiProject

 

GitHub - lhk9311/SemiProject: 세미프로젝트1팀

세미프로젝트1팀. Contribute to lhk9311/SemiProject development by creating an account on GitHub.

github.com

https://www.canva.com/design/DAHBM_4bkgg/9G5BpjgAa5WxccCtyKX6eA/edit

 

SEMI PROJECT

 

www.canva.com

https://www.youtube.com/watch?v=UBd21oA-Vpc&t=1s

 

 

4) UML & DB 모델링

프로젝트 설계 단계에서의 UML 다이어그램과 DB 모델링 도구를 활용하여 구조를 시각화하는 방법을 익힘. starUML로 유스케이스·클래스·시퀀스 다이어그램을 작성하였고, eXERD로 테이블 간 관계(PK/FK) 및 정규화 구조를 설계하는 방법을 학습하였음.

 

5) GitHub

형상관리 도구인 Git의 기본 개념과 GitHub를 활용한 원격 저장소 관리 방법을 익혔음.


※ 본 포스팅은 쌍용교육센터 서영학 강사님의 수업 내용을 바탕으로 작성 되었음.
 
2편에서는 Spring Boot 기반 파이널 프로젝트(예약 시스템)를 시작으로, MyBatis·Thymeleaf·Spring Security·JWT를 활용한 백엔드 개발, Docker + GitHub Actions를 활용한 AWS EC2 자동 배포, 그리고 Monolithic 구조에서 MSA로 전환하는 과정까지 정리할 예정임.

 

다음편 :

https://lhk9311.tistory.com/9

 

[쌍용교육센터] AWS & Docker를 활용한 Java Full-Stack 개발자 양성과정 수강 후기 — 2편

[쌍용교육센터] AWS & Docker를 활용한 Java Full-Stack 개발자 양성과정 수강 후기 — 2편목차1. Spring Boot 기초 (MVC 흐름, MyBatis, Thymeleaf)2. Spring Security + 회원/권한3. 게시판 CRUD4. AOP (Aspect Oriented Programming)5

lhk9311.tistory.com