[쌍용교육센터] 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;

■ 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;

■ 서브쿼리 / 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");


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로 전환하는 과정까지 정리할 예정임.
다음편 :
[쌍용교육센터] 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
'5. 기타' 카테고리의 다른 글
| [바이브코딩] Cursor AI + MCP로 업무 컨텍스트 주입하기 - Figma / GitHub (0) | 2026.05.20 |
|---|---|
| [쌍용교육센터] AWS & Docker를 활용한 Java Full-Stack 개발자 양성과정 수강 후기 — 2편 (0) | 2026.05.04 |