(Database "/Users/*/* not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 (도움말)
처음에 h2를 설치했을때 웹에서 따로 찾아서 설치를 했었다.
근데 이게 맥북의 버전 이슈? 로 권한 문제란다...shit..
그래서 이거는 다시 homebrew를 통해 설치했다.
1. homebrew 에서 설치
brew install h2
2. h2 서버 실행
h2 -web
이렇게 서버를 실행하면
http://172.30.1.21:8082 이런 url이 나오는데 이걸로 접속하면 h2 서버가 정상적으로 열렸다...
2. 두번 째 오류
Connection is broken: "java.net.ConnectException: Connection refused: localhost" [90067-232]
아.. 이거는 알아보니
첫번 째 문제를 해결하기 위해 처음 웹사이트에서 다운 후 brew를 통해 다시 설치 한 다음
서버 실행할때 h2 -web 이렇게 실행해서 문제가 생긴거라고 한다.
근데 좀 헷갈리는게 brew로 설치하고 바로 직후에 h2 -web 이렇게 서버를 실행했을 때는 문제가 생기지 않았는데
tcp를 통해 접속하기 위해? 서는 다른 명령어를 사용해야 하는듯 싶다
h2 -tcp -web -pg
H2 서버실행 명령어 설명
1. h2 -web
이명령어는H2 데이터베이스의웹콘솔을 실행한다. 웹 콘솔은 브라우저를 통해 데이터베이스에 접근할 수 있는 인터페이스를 제공한다. 그러나 이명령어만으로는TCP/IP연결을 수신하지 않는다는 문제가 있다.
2. h2 -tcp
이 옵션은 H2 서버를TCP모드로실행! TCP 모드에서는외부클라이언트가 H2 데이터베이스에 연결할 수 있도록 TCP/IP 소켓을 통해연결을수신한다. 이모드가활성화되어야다른애플리케이션이나 클라이언트가H2 데이터베이스에 연결할 수 있다 !
-pg : 이 옵션은PostgreSQL 호환 모드로H2를 실행한다. 이모드를 사용하면H2 데이터베이스가 PostgreSQL의 SQL 문법과 기능을지원하게 되며 이는PostgreSQL과의호환성을 위해 유용하다
개념서를 따로 구비한 것이 아니기 때문에 홍쌤이 주신 자료도 좋았지만 불필요한? 내용도 있는거 같기도 했습니다. 물론 초반 개념 다지기 용으로는 좋았으나 조금 더 시험에 적합한 자료를 구했습니다! sqld 요약본 이렇게 검색하시면 시험용으로 너무 잘 정리해주셔서 블로그에 공유해 주신 분들을 많이 찾았어요. 그래서 그 자료를 프린터로 뽑아서 이것도 틈틈히 계속 읽었습니다.
그리고 문제를 풀다보면 새로운 추가 개념, 이해안되는 것들은 같이 옆에 정리해서 보았어요!(저만의 노트를 만들기)
- 기존에 이미지를 저장하는 로직은 백엔드의 정적폴더에 경로를 지정하고 -> 프론트에서 MultipartFile로 이미지 저장 및 수정을 요청하면 -> service 단에서 지정한 정적폴더 경로(resources/static : 이게 자바에서 범용적인 정적 폴더일거야) 에 저장하고 디비에 이미지 폴더 이름을 저장하는 방식을 사용했다.
- 이미지를 조회할때는 프론트에서 실제 백엔드 로컬서버에서 http://localhost:8001~~~~/이미지.Jpg 이런식으로 정적폴더에 접근해 이미지를 가져오게 했다
- 배포를 위해서 이미지를 따로 저장하는 네이버클라우드플랫폼(ncp) Object Storage를 활용해 이미지를 저장하고 가져오는 방향을 추진했다.
2. ncp 에서 기본 세팅
멀티캠퍼스 측에서 이미 서브계정을 받았고 이 계정 생성같은 경우는 따로 설명하지 않겠다.
1. 네이버 클라우드 콘솔에 접속해 Object Storage 에 접속해 버킷을 생성한다. 아래 링크대로 이용신청 후 버킷을 생성하면 된다.
- putFileToBucket(MultipartFile file) : 이미지를 ncp oos 에 저장하는 함수
사용자들이 이미지를 저장할때 같은 이름으로 중복이 될 수 있다. 그래서 UUID를 활용해 이미지 이름앞에 특수값을 넣어주면 스토리지에 저장될때 이미지 이름이 겹칠 일이 없다.
metadata 객체를 사용하면 업로드할때 콘텐츠 유형, 길이 ,캐시 제어 등 정보를 설정 할수 있다. 그리고 InputStream을 활용해 이미지 아까 컨피그에서 의존성 주입 받은 amazonS3Client의 putObject함수를 사용하면 이미지가 저장된다.
- deleteFileFromBucket(String fileName) : ncp oos에서 이미지를 삭제하는 함수
이거 같은 경우는 이미지를 수정할때 새로운 이미지가 들어오게 되는데 이때 기존 이미지를 삭제하고 새로운 이미지를 저장할때 그 삭제를 할 때 쓰는 친구다. 이거는 특별한거 없이 의존성 주입받은 amazonS3Client에 deleteObject()함수를 쓰면 끝난다.
+ 아까 컨피그에서 버킷이름을 반환하게 했는데 저장하고 삭제할때 쓰기위해 반환한거임 ><
자.. 이제 실제 코드에 적용해보자
4.2 Controller
이 컨트롤러는 유저와 관한 걸로 회원가입을 할때 쓰는 컨트롤러를 보여주겠다. 사실 여기는 기존에 정적폴더 경로로 저장했던 코드와 동일하다 그대로 MultipartFile로 파일 받고, ModelAttribute를 사용해 회원가입을 할때 body로 들어오는 데이터를 UserRequestDTO와 매칭해준다. 그냥 일반적인 회원가입 컨트롤러임
저 같은 경우는 컴퓨터공학과 전공자로서 3학년 이수 끝나자마자 바로 1회차 시험을 도전했구요 당시 시험 준비했을 떄 딱 평범한 전공자 3학년 수준에서 도전했다고 생각해주시면 됩니다.
(아무래도 전공자이다보니 탈락하면 매우 부끄러울 거 같아 무조건 동일회차가 목표였습니다. 그래서 전공자가 아니라고 생각하면서 꼼꼼하게 장기적으로 공부했습니다. 이 글이 비전공자, 고득점 목표자에게도 효과적이기 바랍니다. ^^ ! )
1. 정보처리기사 실기 소개
일단 필기를 합격해야 실기를 볼수 있겠죠오.. 필기시험일 기준으로 약 2달하고 1주일 정도 뒤에 실기 일정이 있었습니다. 실기 같은 경우는 날짜가 하루밖에 없어서 무조건 큐넷 접수할때 빠르게 하는게 중요해요 (대학교 수강신청정도 까지는 아니지만 그래도 제 시간에 넣어야 좋은 위치에 시험장에서 볼 수 있습니다. ㅠ) 두달이라고 생각하시고 준비를 하셔야 됩니다.
실기 같은 경우는 필기랑 다르게 코딩관련된 문제들이 주이기 때문에 무조건 프로그래밍 언어를 공부하셔야 합격할 수 있어요
실기 합격률을 보시다 시피 쉬운 합격률은 아니에요 제 주변에 저와 함께 시험 준비를 했던 전공자 동기들만 봐도 알고 있는거니까 가볍게 준비를 했다가 떨어지시는 분들도 많았어요
그러니 꼭 꼼꼼히 준비하셔야 합니다.
2. 시험 후기
저는 동일회차 100만점에 84점으로 합격을 했구요! 실기는 60점만 넘기면 합격을 받을 수 있습니다.
제가 이렇게 고득점을 얻을 수 있었던 건...
제 생각에는 필기때 얼마나 이론을 많이 쌓았냐가 좀 중요한거 같아요.
저는 솔직히 프로그래밍언어 말고 다른 암기형 문제들은 거의 다 맞았거든요 그 이유가 이론을 제대로 다회독 했기 때문이에요 프로그래밍언어는 기본 베이스나, 전공자처럼? 그럼 코딩 센스도 좀 필요하고 많이 풀어봐야 하는데 나머지는 열심히 다회독 하면 많이 맞을 수 있어요.
+ 제 기억으로는 아스키코드 꼭 알아야 풀 수 있는 문제도 있었어요. 저 같은 경우는 문제 풀이 방식은 다 맞았는데 이 코드 값을 잘못 넣어서 틀렸던 문제...ㅎㅎ 이런거 처럼 기본적인 전공지식이 있으면 좋을 거 같아요
그렇지만 필기때 많이 준비를 못하거나, 지식이 부족해도 충분히 2달 동안 빡세게 한다면 가능합니다. ㅎㅎ 아자아자(저도 했잖아요!))
참고로 실기 준비는 2달동안 최소 4시간 이상, 주말에는 6시간 이상은 하려고 했어요 ( 집중 잘되면 8시간은 공부했다는,,,ㅋㅋ)
3. 인강 추천
사실 필기때는 인강을 안봤었는데 실기때는 필기처럼 찍을 수가 없잖아요 무조건 이해를 하고 넘어가야 문제를 풀 수 있어요. 그래서 아무리 잘 알더라도 자만하지 않고 인강을 1회독을 목표했습니다.
사실 저 같은 경우는 학교 졸작이랑 병행하면서 시간이 많이 부족했어요. 그래서 저한테 필요한 부분, 헷갈린 부분만 인강을 봤어요.
예를 들어 진짜 중요한 화이트박스, 블랙박스, 디자인패턴 같은 건 종류도 많고 암기하기도 이해하기도 어렵거든요
이렇게 중요한것들 위주로 인강을 봤습니다. 아무래도 기본 베이스가 부족하거나 시간이 넉넉하신 분들은 그래도 처음부터 끝까지 다 보셔도 좋을 것 같아요 (저는 개인적으로 부족한 부분들이 다 이해가 되서 너무 좋았습니다. )
1. 유튜브에서 정치기 java/c/python 정리된 영상 보기 (프로그래밍 언어 지식이 부족할 경우)
2. 실기 이론서 1회독하기 ( 그냥 읽어보면서 1회독해요)
3. 수제비 인강을 겸행해서 2회독
4. 요점정리하거나 / 두음pdf 보면서 또 3회독
(회독할때 이론서 사이에 있는 문제들은 최소 3회독하기 + 여기서 틀린문제 위주로 다시 풀어도 됩니다. 맞은 문제는 다시 풀 시간이 없으니 헷갈리거나 틀린거 표시해서 꼭 다시 푸세요 많이 도움됩니다. )
5. 어느정도 최소 3회독이 됐다면 파이널 모의고사 풀기 (기출문제는 무조건 4회독 이상하고 나머지 모의고사도 시간남으면 최대한 풀어보기)
6. 위에 1~5번을 할동안 어려운거는 수제비 카페 적극활용, 시험 전에 카페에 올라오는 예상 문제 풀어보기
5. 꿀팁
필기때도 했던 이야기인데 사실 제일 중요한건 다회독이에요 모든 시험합격, 제가 학점도 관리를 잘 했었는데요.
꿀팁은 그냥 짜투리 시간을 잘 썻냐 안쎳냐 차이인거 같아요. 밥먹을때, 학교 쉬는 시간, 이동시간, 잠자기전, 샤워할떄, 화장실 갈때 핸드폰 들고 다닐 수 있을 때는 무조건 헷갈리는 부분 사진 찍어서 다시 보고 그랬어요 ( 예를 들어 오늘 학교 등교시간에 암호 알고리즘 중 대칭키 종류들을 꼭 외우자) 이렇게 목표를 설정해서 외우기도 했죠 (그냥 미친놈이에요 저는 왤케 열심히 했지 ㅋㅋ)
이렇게 암기할거 문제집을 사진찍어서 폴더에 저장하거나
요점정리한것들 캡쳐해놓거나, 두음 pdf 핸드폰에 저장해서 계속 봤어요
그리고 유튜브에 있는 자료들도 적극 활용하세요.
제가 기본 베이스는 수제비 책, 인강으로 틀을 잡았지만 시간날때는 아무거나라도 유튜브에 있는 자료들 그냥 검색해서 봤어요
예를 들어 그냥 유튜브에 정처기 실기 데이터베이스 검색해서 시나공껏도 자기전에 보고 자고 샤워하면서도 틀면서 샤워했다는 ㅋㅋ
아무튼 그렇게 짜투리 잘 활용하면 충분히 할 수 있습니다.
개인적으로 서브넷, ip 이런 어려운 문제들은 흥달쌤을 애용했어요 (예를 들어 2024년 1회차 정처기 실기 흥달쌤 5번 문제 이렇게 검색하거나, 회차별로 문제풀이 해주신 영상들 보면서 어떻게 어려운 문제들 푸는지 감을 익혔습니다. )
그리고 출제 비중 위주로 단원별 앞에 꼭 체크해서 많이 나오는걸 많이 보세요....! 저는 상중하로 체크해서 단원별 앞에 체크해놓고 중요한건 다회독, 요점정리를 다했어요 (불필요한건 하지마세요....!) 그리고 이해 안가면 넘어가요... 넘어가서 시간 지나면 또 이해되고 그러니 한 곳에서 오래 머물지 마세요..!
필기때도 자료를 첨부했긴 했지만 필기 글을 안볼 사람들을 위해 출제기준, 비율 자료를 넣었습니다..
객관식으로 4지선다형, 문제은행식이기 때문에 충분히 기출문제집만 돌려도 합격을 할 수 있습니다.
합격 기준은 100점을 만점으로 하여 과목당 40점 이상, 전과목 평균 60점 이상을 맞으면 되기 때문에 생각보다 도전해볼 만한 점수네요 ㅎㅎ
최근 5개년 시험 합격률만 봐도 필기 같은 경우는 충분히 쉽게 합격할수 있을겁니다.
2. 시험 후기
필기같은 경우는 사실 기출문제만 돌려도 충분히 합격할 수 있습니다. 하지만 우리의 목표는 실기까지 원큐에 합격하는거잖아요?
그러기 위해서는 필기때 흐름을 잘 잡아놓는게 중요해요!!!!!( 필기때 이론을 최소한 잡아야 실기를 합격할 수 있는거 같아요 )
제 주위의 저와 함께 본 전공자 동기들도 필기는 바로 합격했는데 실기는 떨어진 경우도 많았습니다. 전공자에게도 실기는 쉽지않아요
그렇기 때문에 필기부터 이론을 꼭 다회독!하시길 ...
필기 점수
일단 제 필기 점수는 무려 100,,점이 나와버린 사람입니다..
솔직히 저는 이론서를 무려 4회독을 했습니다. ㅋㅋ
준비기간은 약 2달정도 잡았습니다.
사실 필기 준비 기간을 넉넉히 잡은 이유는 실기 때문이었어요
실기준비 기간이 개강하고 졸작을 준비해야 하는 시기여서 필기때는 아무래도 이론을 다 잡아야 실기 준비가 수훨할 거 같아서 방학기간이라 하루에 4시간은 공부했던거 같습니다. (물론 공부 안한날도 많긴한데 그래도 최대한 하려고 했어요)
3. 문제집 추천 / 인강 - 수제비
ㅇㄹ
저는 솔직히 인강은 안봤구요
이 이론서만 가지고 4회독을 했습니다. 수제비 이론서가 생각보다 너무 자세하고 쉽게 설명되어 있습니다.
그리고 수제비카페가 잘 커뮤니티화되어 있어서 모르는 문제나 질문이 생기면 카페에 질문도 할 수 있어요
실기때는 인강을 봤었는데 이거는 실기편에서 작성하겠습니당
그리고 두음 법칙 !!
수제비의 제일 큰 장점이 중요하게 암기할 부분을 두음으로 정리해놨다는거에요 두음법칙이라는게 뭐냐면 ㅎㅎㅎ"동경결상 유분페원비오" 뭐이런거... 아주 시험볼떄 도움이 됩니다. ㅜ
개꿀팁 !!!
수제비카페에서 두음법칙을 싹 다 모아놓은 pdf 파일을 올려놓는데 저 같은 경우는 그 pdf 를 다운받아서 두음법칙 옆에 해당하는 이론서의 페이지 쪽수를 적어놨어요. 이게 왜 좋냐면 문제를 풀다보면 두음법칙은 생각나는데 이 개념이 뭔지 헷갈리는 경우가 많아요 그럼 두음법칙만 보는게 아니라 쪽수를 적어놓은 이론서를 같이 바로 찾아보면서 헷갈리는 부분을 다시 잡는거에요
사실 수제비가 좋았던게 이론뿐만아니라 단원별로 해당 문제들이 같이 부록되어 있는데 문제들이 생가보다 괜찮은 문제들이 많았던거 같아요 그래서 저 같은 경우는 이 문제들도 최소 세번 풀었고 문제집에 직접 문제를 푸는게 아니라 위에 틀린거만 표시해서 나중에 또 풀고 또 풀고 이렇게 표시해둔거 위주로 풀었어요
이렇게 이론서 회독이 끝나면 기출문제집을 풀어주면 되요
사실 기출 문제집은 시험 2주 정도 남기고 풀었던거 같아요 급하게 서점가서 기출문제집 사느라 대충 인기있던거 골랐었는데 시나공 기출을 풀었어요 생각보다 풀기 편하게 잘 되어 있어서 시나공도 괜찮았던 거 같아요
그리고 정처기가 5과목에 범위가 생각보다 정말 광범위해요 넓게 공부를 해야하는데 이때 시험이 어떤 과목에서 비중이 크게 나오는지도 알고 있어야 해요 그래야 회독할 때 비중이 낮은 과목은 후순위로 두고 비중이 높은 과목을
1. 수제비 이론서 다회독( 최소 3번이상은 하기) - 1회독만 어렵지 그 이후로는 쌉가능
2. 두음법칙 중요한거 위주로 다 외우고 외울 수 있는거 최대한 외우기
3. 기출문제집 최소 3개년 3회독
3. 합격 꿀팁
사실 1회독이 어렵지..1회독 진짜 엄청 오래 걸리거든요? 거즘 2주 넘게 했던거 같은데 그 후로 다회독은 2일만에 2회독, 3회독 할수 있습니다..!
그리고 저 같은 경우는 자기 전, 밥먹으면서, 화장실 ,, ㅎ하하 이런 짬이 날때 유튜브에서 돌아다니는 정처기 요약 강의 같은거를 봤어요 아무거나 상관없어요 진짜 아무거나 상관없고 최신버전으로 해서 봤어요 이게 은근 도움되는게 생각지도 못한 부분들, 수제비에는 표시가 안됐지만 다른 곳에서는 설명하는 부분들, 내가 헷갈렸던 부분들 이런것들 그냥 유튜브 본다고 생각하고 편하게 틀어놓고 밥먹고 샤워하고 화장하고 그랬어요 ... ㅎㅎ
그리고 휴대폰에 저는 외워야 하는 이론들을 공부하다가 아 잘 안외워진다, 헷갈린다, 이거중요하다 하는 것들은 그냥 핸드폰에 사진을 찍고 폴더에 넣어서 길다닐때, 공강일때, 틈날때마다 봤어요
직장인들이나 일하시는 분들 시간 진짜 부족할거에요 저도 다른거랑 병행하면서 해서 무조건 짬나는 시간을 중요하게 생각해서 공부했어요
step 2. vscode에서 m1, m2 프로세서 인식이 되고, mps가 현재 환경에서 지원되는지 확인하기
아래와 같이 확인이 된다면 성공
디바이스를 'mps' 설정하는 것이 포인트
import torch
print(f"mps 사용 가능 여부: {torch.backends.mps.is_available()}")
print(f"mps 지원 환경 여부: {torch.backends.mps.is_built()}")
if torch.backends.mps.is_available():
mps_device = torch.device("mps")
x = torch.ones(1, device=mps_device)
print (x)
else:
print ("MPS device not found.")
step 3. 학습테스트
프로세스 인식을 했으니 실제 학습에 사용이 가능한지 확인해야한다.
1. 코드가 돌아가는 중에 맥북이 '활성상태보기' 기능 에서 gpu가 활용되는 것이 급격히 증가한다면 성공
2. cpu 학습 과 gpu 학습 시간 비교하기 ( 와우 무려 cpu는 4.4 s , gpu는 0.2s 차이가 나네욤 ㅎㅎ)
import torch
import time
# CPU에서의 연산 시간 측정
start_cpu = time.time()
tensor_cpu = torch.randn(10000, 10000)
result_cpu = tensor_cpu @ tensor_cpu
end_cpu = time.time()
print(f"CPU에서의 연산 시간: {end_cpu - start_cpu}초")
# MPS(GPU)에서의 연산 시간 측정
if torch.backends.mps.is_available():
start_mps = time.time()
tensor_mps = torch.randn(10000, 10000, device="mps")
result_mps = tensor_mps @ tensor_mps
end_mps = time.time()
print(f"MPS(GPU)에서의 연산 시간: {end_mps - start_mps}초")
else:
print("MPS(GPU) 사용 가능한 환경이 아닙니다.")