2023/04/25 TIL
[MultiIt Backend] |
서론
오늘은 정말 오랜만에 블로그 글을 쓴다! 저번주 일요일이 정보처리기사 시험이였어서 나름 핑계지만.. 낮에는 프로젝트 저녁에는 공부를 하다보니 블로그 쓰는걸 나중에 하고 우선은 프로젝트와 특히! 정처기 실기 시험에 집중하는것이 좋다고 생각했어서 블로그쓰는건 좀 미뤘었다ㅠㅠ 오늘 할일하고 내일이나 모레중 못쓴날들도 좀 쓸것이다! 대충 내가 어디어디를 진행을 했고 그런부분은 정리를 해놔서 ㅎㅎ 원래는 어제 월욜에 다정리할려했으나 최근 밤을 좀 새고 할일을 하다 보니 밀렸었다. 지금부터는 이제 다시 열심히 매일매일 쓰는 습관을 다시 장전해야겠다. 오랜만에 글을 쓰다보니 조금 어색하긴 하지만 약간 미뤄졌어도 내가 정한 습관인 TIL 작성하기를 어기지 않고 할려고 하는것이 중요하다 생각이 든다. 무엇이든 꾸준히 열심히! 시험도 끝났겠다 합격일진 아직 모르지만, 더 열심히하고 이제는 토스나, 오픽 공부와 함께 슬슬 원서나 다른 여러가지 내가 할 수 있는걸 학습하며 나의 능력을 더 기를 예정이다. 우선은 프로젝트에 좀 더 많이 집중할 예정이다.
오늘 하루 진행 내용
오늘은 크게 팀 프로젝트 통합을 위주로 진행한 날이다. (에러잡기 +)
(기본적으로 저번주에 진행한 내용들이 여러개 있는데 이것은 오늘거 먼저 적고 할일을 한 후 시간이 날때마다 정리해둔 파일이 있어서 하나씩 적을예정이다. 솔직히 TIL은 하루하루 당일에 적어야하는데 블로그로 옮기는 시간이 좀 걸려서 안좋지만 이번 한번만 시험이 있었으니! 이렇게 진행할 것이다. 그래서 내용이 갑자기 생략된 느낌이여도 ㅎㅎ 추후에 다 올릴것이니!)
기본적으로 회원부분을 맡으신 팀원분이 어느정도 작업이 됬다해서, 회원 같은 경우는 모두가 공통적이고, 우리 프로젝트 서비스를 위해 필수적인 부분이다 보니 통합을 진행을 어느정도 해보려했다. 하지만 정작 그 팀원의 작업을 할때 우리의 Git repository에서 작업을 한것이 아니라 혼자 학습겸 진행 한것이라, 패키지 구조도 다르고 다같이 팀원이 공통 인터페이스나 이런 구조를 확실히 정하지 않고, 저번주가 기본적인 학습느낌이라 통합이 조금 어려웠다. 특히 내가 진행 중이던 팔로우 부분에 원래 나는 간단히 회원을 임의로 만들었는데 정작 회원 부분 만들어진 것을 가져가려하니 createSQL 오류가 떠서, 내가 안일하게 내가 했던 작업에 그대로 가져다 붙이다보니 원래대로 되돌릴 수 없었다. 이걸 다시 처음부터 부분부분 통합하는 것 보다, 어처피 회원부분은 공통적이니 다른 팀원들과 이야기한 결과, 회원 부분만 들어있는 깃허브 레포지토리를 새로파 거기서 자신이 하던 작업을 넣으며, 이제부터 이 repository를 통합하는, 즉 우리의 진짜 프로젝트 repository로 진행 하기로 결정하였다.
1. 에러잡기
(1) 통합 시 구문 오류로 인한 db 연동 실패
통합시 다른 팀원이 작업한 회원부분과 내가 생성한 DB에서 생성된 구조와, SQL문과 엔티티등 만든것이 다르다보니 구문 오류가 나고 그러다보니 자동으로 MY SQL DB가 에러가 뜨며 갑자기 기존에 사용하던 DB를 사용하지 못하게 되었다.
-> 이를 해결할 겸 어처피 우리가 개개인 작업하던 mysql 버전이 달랐어서 팀원들의 버전을 확인한 결과 8.0.22 여서 버전을 맞추고 우선 회원부분만 받아와 새로 레포지토리를 생성하니 정상적으로 작동됬다.
(2) ERROR 1396 (HY000): Operation CREATE USER failed for -> 새 계정 생성 실패
위의 통합을 어느정도 해결한 후 다시 DB가 연결되는걸 확인하기 위해 mysql command line 에서 새로 계정과 디비를 만들려하는되 ERROR 1396 (HY000): Operation CREATE USER failed for 에러가 떴다.
-> 이를 확인해보니 나는 my sql을 삭제하고 다시 깔면 기존에 있던 정보도 사라지는 줄 알았는데 사라지지 않아서 내부에 정보가 저장되어 있어서 중복 값이라 저장이 안되는 것이였다.
delete from mysql.user where User ='삭제할 아이디';
delete from mysql.db where User ='삭제할 아이디';
flush privileges;
를 통해 삭제후 다시 생성하니 정상적으로 작동하였다. -> db연결도 정상 작동되었다.
프로젝트 통합 진행, 1. 통합 레포지토리 생성 및 진행 사항 업로드 , 2.db 연동 및 구동 확인
느낀점
확실히 통합과 깃 관리의 중요성에 대해 느낄 수 있었다. 우리 팀이 아무래도 처음 이런 프로젝트를 진행하다 보니, 초기에 원래 다같이 사용할 repository를 만들어 놨으나 팀원분이 거기서 작업을 할 생각이 아닌, 연습이다 보니 따로 작업해야겠다 생각해 통합된 패키지 구조와, 틀이 아닌 다르다 보니, 통합시 너무 어려움을 겪게 되었다. 결국 회원이라는 모듈은 모든 서비스에 필요한 부분이다보니 그 팀원이 만들던 걸로 깃을 레포를 새로 파 다시 이 형식에 맞게 재 작업을 해야하는 상황이 왔다. 조금만 내가 신경써서 통합 repo에서 작업을 해달라 이야기하고 이런 하나씩 어느정도 소규모 작업이 완료될때마다 commit을 하고 알려줘 다른 팀원들은 이를 pull 받아 동일한 환경에서 지속적으로 통합하며 진행했다면 이런 불편함을 겪지 않을 수 있었을텐데 싶고, 이런 과정을 잘 이끌지 못해 다른 팀원들에게 좀 미안했다. 하지만 이런 경험을 통해 협업에서 필요한 부분들과, 협업 툴 관리, 진행 상황 관리 등 팀프로젝트를 진행 시 어떤 방식으로 진행하는 것이 좋고, 어떤 것이 필요한지 알고 한번 더 정리하며 중요성을 느낄 수 있었다.
배운점
일단 위에서 이야기했듯이 통합의 중요성에 대해 확실히 배울 수 있었다. 또한 그 외에 mysql 계정 생성 및 권한 부여에 대해 다시 정리를 할 수 있었다. 또한 패키지 구조를 생성할 때 어떤방식이 좋은 지와 안전을 위한 dto와 entity 구분에 대해서도 배울 수 있었다.
+ 개념 & 용어
패키지 구조
새로 팀 repository를 만들며 패키지 구조에 대해 의문에 생겨 찾아보다가 알게된 것을 간단히 정리하겠다.
패키지 구조를 짤 때 나는 보통 두가지 형태로 request, response dto를 관리했었다.
첫번째는 controller [xxController.java] / dto - request [xxRequestDto], response [xxResponseDto]
두번째는 controller - request [xxRequestDto], response [xxResponseDto] / dto - [xxdto]
나는 그동안 첫번째 형태가 dto와 controller가 구분되어 있는 느낌이라 조금 더 선호했었다.
이에 대해 알아보니 두번째 형태가 더 각 연결관계에 맞게 잘 정의된 패키지라는 것을 찾을 수 있었다.
왜냐하면 애초에 request, response dto 자체가 controller에서 사용자에게 받고 전달해줘야할 데이터를 다루다 보니 어처피 controller 외 적인 부분에서는 사용할 일이 없다. 그러다보니 그 내부안에서만 사용하니 같은 controller 패키지 하위에 넣어 관리하는 것이 구조적으로 더 옳다는 것을 알 수 있었다.
또한 entity만을 사용해 모든 서비스를 처리하는 것은 중간에 데이터 손실과 보안상 안전하지 않아 entity와 이런 서비스를 처리하기 위해 사용되는 다른 dto를 생성해주는 것이 좋다는 것도 알 수 있었다.
MySql 사용자 추가 및 권한 부여
1. mySql 접속 -> cmd : mysql -u root -p or mysql Command Line Client 사용
2. 현재 생성된 사용자 계정 확인
use mysql; --mysql database 선택
select host, user, password from user; --user 테이블 살펴보기
3. 사용자 추가 (+ 삭제)
--1. 사용자 추가
create user 사용자ID; --(1) 사용자 추가
create user 사용자ID@localhost identified by '비밀번호'; --(2) 사용자(user)를 추가하면서 패스워드까지 설정
create user '사용자ID'@'%' identified by '비밀번호'; --(3) 외부에서의 접근을 허용하는 사용자 추가
--+ 기존에 계정에 외부 접근 권한을 부여시 Host를 '%'(외부 접근 허용) 로 하여 똑같은 계정을 추가
--2. 사용자 삭제
drop user '사용자ID'@localhost; --(1) 사용자 삭제
select * from user; --등록된 모든 사용자 ID 조회
delete from user where user = '사용자ID'; --(2) 조회한 사용자ID 찾아서 삭제
4. 데이터 베이스 생성
show databases; --DB 목록 확인
create database DB명; --데이터베이스 생성
create schema DB명 default character set utf8; -- 둘중에 하나를 입력하면 DB 생성
create database DB명 default character set utf8;
--default character set을 지정하지 않으면 한글이 깨져서 나오니 주의
drop database DB명; --데이터베이스 삭제
5. 사용자에게 데이터베이스 사용권한 부여
GRANT ALL PRIVILEGES ON DB명.테이블 TO 계정아이디@host IDENTIFIED BY '비밀번호';
-- 계정이 이미 존재 하는데 'identified by '비밀번호' 부분을 추가하면 비밀번호가 변경된다
GRANT ALL privileges ON DB명.* TO 계정아이디@locahost IDENTIFIED BY '비밀번호;
GRANT ALL privileges ON DB명.* TO 계정아이디@'%' IDENTIFIED BY '비밀번호';
--all privileges 대신에 원하는 권한을 넣어주면 됨 EX)select, insert, update...
--mysql 버전에 따라 "IDENTIFIED BY '비밀번호;"로 비밀번호를 추가하는 부분이 안되서 에러가 나기도해
GRANT ALL privileges ON DB명.* TO 계정아이디@'%';
--이런식으로 설정해줘도 된다.