2024-01-10 (23일차) - SUBQUERY, 회원가입기능

·2024년 1월 10일

📅 2024-01-10, 23일차

DBMS

SUBQUERY

  • mySQL if문 (자바 삼항연산자와 비슷)
  • 서브쿼리는 성능저하의 원인이 된다. 왜? 쿼리를 두번 실행해야하기 때문에.
  • 서브쿼리를 사용하는 쿼리문에 서브쿼리의 결과는 1개만 나와야한다.
  • where 조건이 들어가야 함.

sql 비교연산자 - TRUE / FALSE

  • 참(True)이면  1을 반환
  • 거짓(False)이면 0을 반환

구현해야 할 거 :

회원가입 기능 구현 -> member join

  • 아이디 중복페크
  • 비밀번호 확인
  • 필수 입력 정보

member (필드이자 컬럼) -> class / table

  • id
  • regDate
  • updateDate
  • loginId
  • loginPw
  • name

내 생각의 흐름...

article write처럼 입력하고 저장하면 되겠지?

memer join은 쿼리를 어떻게 해야할지 감이 안잡힘
member table 만들어서
insert into member 하면 되겠음

id는 필요없고 자동 increment
regdate도 쿼리로
회원가입엔 updatedate는 필요없음

isJoinableLoginId 이부분은 어떻게 손을 봐야하나
일단 주석처리하고 테스트

Member 클라스 만들기, Article 클라스랑 비슷하게

member join 에러 뜸 -> exception 어쩌구 빨간색으로 블라블라

article write랑 똑같이 했는데 에러 뜨는 이유는?
article write랑 member join이 다른건 뭔데?

member <- 이거도 문제였지만

create table 자체를 mysql에서 안했더라.. -_- 똥멍청이

중복체크 기능 구현 중
회원가입을 시도하면
입력하는 아이디 비번 이름 데이터에 저장은 됨

되고나서 뭐라고 함
List<Map<String, Object>> 에서 ..
왜또??????
이거 쓰면 안되는건가?
isJoinableLoginId 함수를 쓰는게 아닌건가?
그럼 다른 방법 없나?
응 다른 방법이 있네!

// MemberController 클래스
boolean isLoginIdDup = memberService.isLoginIdDup(loginId); // memberService클래스에서 함수 호출해서, 아이디가 중복인지 true / false 담아

			if (isLoginIdDup) { // 만약에 이 함수 실행해서 true면 중복이라라고 출력해
				System.out.println(loginId + "는(은) 이미 사용중");
				continue; // 중복이면 다시 올라가서 로그인 아이디 입력받고
			}

			break; // 중복아니면 이 while문 빠져나와서 그 다음 로직으로 가
// MemberDao 클래스
public boolean isLoginIdDup(String loginId) { // 서비스한테 넘겨받은 (회원가입시 입력받은)아이디를 쿼리에 있는 변수에 담아
		SecSql sql = new SecSql(); // 여기서 입력된 쿼리 dq로 날려
		sql.append("SELECT COUNT(*) > 0"); 
		sql.append("FROM `member`");
		sql.append("WHERE loginId = ?;", loginId); // <-여기에 아이디값 들어가는거

		return DBUtil.selectRowBooleanValue(Container.conn, sql); // DBUtil.selectRow어쩌구 함수로 DBUtil클래스에서 일을 막 하고 나온 값을 서비스한테 반환해줌
																	// 아마도 이 안에서 하는 일이, 회원정보 한줄씩 훑어보는거같고, 중복아이디 있으면 true 리턴받는 듯?
	}

MVC 구조 도입
-ArticleController
-MemberController

-ArticleService
-MemberService

-ArticleDao
-MemberDao


👩‍💻🏠TODO - 01/10

[JDBC_AM]
1. <작업 13, 회원가입 기능 추가, 아이디 중복 체크, 비밀번호 체크, 필수 입력 정보> 영상 이해하기
2. <작업 14, Controller 추가 및 기능 이전> 영상 이해하기
3. Controller 추가 해보기

  • 처음부터 끝까지 다 스스로 한건 아니고, 처음엔 강사님의 로직을 보며 어떤식으로 해야하는지 파악 후 이 후론 혼자 해봄!
  • (cmd)부분 햇갈림 - 어디에 매개변수를 세팅하고 어디에 인자로 세팅하는지
    • cmd받아서 함수로 cmd를 분석하거나 쪼개기를 한다거나 하는 경우 인자로 세팅!
  • 컨트롤러 생성자에 왜 저런 로직을 넣었는지 이해가 안감
    • 멤버컨트롤러에서 객체생성됨과 동시에 커넥션과 스캐너 기능을 넣은거임!

Connection conn;
Scanner sc;

	public MemberController(Connection conn, Scanner sc) {
		this.conn = conn;
		this.sc = sc;
	}
  1. <작업 15, article write, MVC 구조 추가> 영상 이해하기

[WiseSaying]
1. WiseSaying CRUD 구현 연습

[SQL]
1. <scott 1,2,3, outer join, sub query> 강의영상에서 sub query 부분 다시 보고 이해하기

[기타]
2. 녹화
3. 1 ~ 2시 안에 마무리

profile
hello world

0개의 댓글