폴더는 깃 연동 안되어있던 새 폴더 만들어서 하기 수업 자료랑 git 겹치면 충돌날수도있음
레포지토리 새로 작성 후 인텔리제이 git연동하기
터미널 command prompt
git init
git remote add origin 레포지토리주소
git add .
git commit -m "initial upload"
git push origin master
현재 해당 레포지토리에 master브랜치로 올라간것을 확인할 수 있다.
master 제한하기
(협업경우 Collaborators에서 조원 초대)
레포지토리 settings -> Branches -> add branch rule
Branch name pattern master
✅Require a pull request before merging
✅Do not allow bypassing the above settings
작업 끝내는 시점마다 pull request 자주 해주기 ~~
인텔리제이에서 Git 브랜치 추가변경

🔽설정폴더 배제

+ UTF-8 Gradle 한글설정
기본 패키지폴더


sync 후

gradle run
gradle build
-> 배포파일 만들어짐

이 파일로 배포할것이다.

한글이.. 제대로 안나오는...
compileOnly 'org.projectlombok:lombok:1.18.32' implementation 'com.oracle.database.jdbc:ojdbc11:23.4.0.24.05' implementation 'com.oracle.database.nls:orai18n:23.4.0.24.05' implementation 'org.mybatis:mybatis:3.5.16' implementation 'org.slf4j:slf4j-api:2.0.13'implementation 'ch.qos.logback:logback-classic:1.5.6' 
MVC 모델 - 역할분담
M: MODEL
Service: 기능/ ex) 회원 가입 기능 -> JoinService객체
이 기능들이 유기적으로 동작한다.
V: VIEW
C: CONTROLLER
DDD(Domain Driven Design)🌼
: 도메인 주도 설계
- 도메인(Domain): 전문가 영역 - 구분될수있는 영역
- 게시팜 도메인, 주문 도메인, 상품 도메인, 회원 도메인 ...
표현계층 - View
도메인계층
인프라계층(공통인프라) - DB ...
MSA(Micro Service Architecture)
: 서비스를 영역별로 (독립적) 나눠서 설계
1) 메뉴 라우팅
공통 도메인

인터페이스 설계
📌
+ Router 인터페이스 설계


🔼공통 상수를 정의하기위한 패키지

2) 컨트롤러
📌
+Controller 인터페이스

템플릿 메서드 패턴: 특정 절차가 고정되어 있는 경우
템플릿 메서드 패턴 틀 작성

AbstractController 템플릿 메서드 패턴 구현



도메인 분리

📌

📌

📌
main
+MainRouter

싱글톤 패턴 형태로 만들어서 공유 해주는게 자원 낭비가 없다.
싱글톤 패턴 추가

📌

Application에서 main 실행해보자


📌
+AbstractController에서 common부분 작성해보고 공통적으로 나오는지 확인해보자


📌
+ControllerLocator

📌
+MemberControllerLocator


+MainRouter 수정

3) 뷰(View): template

📌


📌

윈도우즈 인코딩 window949, CPC949, EUC-KR -> 한글을 2바이트로 표현하는 유니코드
UTF8: 한글 1자를 3바이트로 표현하는 유니코드
file.encoding 환경변수 UTF-8
java -jar -Dfile.encoding=UTF8 파일명.jarString System.getEnv("환경변수명")
gradle build
📌
+MainController 수정

📌
+Templates 클래스 기능 추가/수정




기본틀이다앗....
📌
+Templates 수정

📌
+JoinTpl
회원가입쪽 기본 양식

JoinController 동작하는지 확인 코드수정

📌
+LoginTpl
로그인 기본양식

LoginController 동작하는지 확인 코드수정

+AbstractControler
공통 라인 추가
👩🏫
레포지토리에서 풀 리퀘 후 인텔리제이 master로 브랜치 이동

인텔리제이에도 pull하기
master쪽에서 member브랜치 새로 생성하고 브랜치 member로 옮기기
기능 - Service
DTO, DAO, Validator ...
다른 객체의 협력을 통해서 하나의 기능을 완성
회원이 입력한 데이터가 매개변수 -> 처리
회원기능
📌
+ JoinController
prompt Override 재정의

+AbstractController 코드추가

📌
+RequestJoin
사용자 입력 데이터를 전달 하기 위한 변수 정의 클래스

+ JoinController 추추추추가!

실행해복쟉

📌
+ LoginController
prompt Override 재정의

📌
+RequestLogin

📌
global
+Service 인터페이스 생성

기능처리 클래스


📌
+ServiceLocator 인터페이스 생성 - 서비스 찾기

+MemberServiceLocator 추가

+AbstractServiceLocator 추가

+ JoinController 추추추추가!

+ LoginController 추추추추가!

데이터베이스 접근 설정
마이바티스 설정 추가할거임 !!!
mybatis-config.xml

도커접속 도커접속 !!!!!!
터미널 커맨드 프롬프트
docker exec -it oracle-xe /bin/bash
sqlplus system/oracle
CREATE USER PROJECT2_1 IDENTIFIED BY oracle;
ALTER USER PROJECT2_1 QUOTA UNLIMITED ON USERS;
GRANT CONNECT, RESOURCE TO PROJECT2_1;
CONN PROJECT2_1/oracle

CREATE SEQUENCE SEQ_MEMBER;
마이바티스 xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties>
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
<property name="username" value="PROJECT2_1"/>
<property name="password" value="oracle"/>
</properties>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/choongang/member/mapper/MemberMapper.xml"/>
</mappers>
</configuration>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.choongang.member.mapper.MemberMapper">
<select id="" >
</select>
</mapper>
...등등등... 추가 설정..