아래의 글은 개인 학습을 위해 공식문서와 블로그 등을 정리한 것입니다. 혹시 잘못된 부분이 있어 지적해주신다면 감사하겠습니다🙏🏻 CORS를 알게 된 계기 FE분들과 프로젝트를 진행하다 마주쳤다. 발표를 2시간도 남기지 않은 상태에서 처음보는 403에러와 경고때문에 많이 당황했었다. 다행히 주변분들에게 물어물어 CORS때문에 생기는 이슈임을 알게되어 코드 수정을 할 수 있었다. 하지만.. 발표 10분을 앞두고 또 터진 CORS에러... 왜 터졌을지는 아래에서 설명하겠다.. CORS란? Cross-Origin Resource Sharing의 줄임말. CORS를 이해하기 위해선 SOP(Same-Origin Policy)도 알아두면 좋은데.. 결국 이 둘이 무엇이냐 하면.. 웹이라는 공간에서 다른 곳에 있는 리소스를 가져와서 사용하는 일은 굉장히 흔한일이다. SOP는 말 그대로 '같은 출처에서만 리소스를 공유할 수 있다'라는 규칙을 가진 정책이고 이 때문에 리소스
Linux - nohup, & nohup: no hang up의 약자. 리눅스, 유닉스에서 터미널 세션이 끊겨도 실행을 멈추지 않고 동작하도록 하는 것 &: 프로세스를 실행할 때 백그라운드에서 동작하도록 만드는 명령어 예시: nohup java -jar jar이름 & 프로세스 종료 kill -9 프로세스 아이디 오늘의 삽질 mapSqlParameterSource.addValue("cardStatus", cardStatus); 여기서 addvalue의 앞자리가 paramName이었는데 DB테이블에 있는 컬럼 이름과 같게 하지 않아서 no value supplied for the sql parameter 'cardstatus': no value registered for key 'cardstatus' 에러 메시지가 발생했다. 해당 이슈를 어디에서 해결해야 하는지 몰라서 헤매다가 나단이 도와주셔서 paramName을 DB와 같
FE 분들과 처음으로 협업(팀플)을 하게 되면서 FE 분들에게 API 명세를 드리기 위해 swagger를 사용해보게 되었다. 아직도 1/10도 모르는 것 같지만 이후에 다시 공부할 날을 대비해 기록을 남긴다. 스웨거(swagger)란? API 명세를 관리하기 위한 프로젝트 Web에서 직접 작성하거나 Spring에 의존성 주입해서 사용하는 두가지 방법이 있다. 우리 팀에서는 코드 작성이 거의 되어 있지 않은터라 빠르게 API 명세를 FE분들께 넘겨드리기 위해서 웹에서 직접 작성하는 방식을 사용하였다. 팀원과 함께 작성한 swagger의 일부를 캡쳐했다.  * 생성자가 하나일 때 @Autowired를 생략 가능한 이유? 김영한님 강의에서도 생성자가 하나일 때 @Autowired를 생략 할 수 있다고 나왔는데 그 이유는
Q. Optional객체를 attribute에 담아? 왜? 일단 Optional이 뭐냐면? Optional is primarily intended for use as a method return type where there is a clear need to represent "no result," and where using null is likely to cause errors. A variable whose type is Optional s
git branch에서 작업을 하고 Pull Request하기 전에 git push origin 작업한 브랜치 로 푸쉬해 놓고 git hub 사이트에서 new pull request로 작성을하자. 이때 main에 날리지 말고 (목적지는) 내 브랜치인지 제대로 확인하고 (출발지는) 내가 작업한 브랜치인지 확인을 꼭 제대로 하자. (출발지, 목적지라는 단어를 쓰는것이 맞는지 모르겠지만 이렇게 이해하면 좀 더 쉽게 기억할 수 있을 것 같다.) 리팩토링 Naming Convention을 잘 지키고 메소드명, 변수명을 아무렇게나 짓지 말자.
git git 명령어 정리 git commit 커밋 git clone -b 특정 브랜치 클론해오기 git switch 브랜치 이동하기 git checkout이 있지만 해당 명령어는 브랜치를 바꾸고 커밋을 꺼내오는 두 가지 기능이 있음. 이것을 git switch와 git restore로 기능분할함. git merge 말 그대로 merge. 병합. git rebase 차이가 나는 애를 들어서 옮김. git merge와 rebase는 확실히 써야할 때를 구분해서 써야한다. 둘의 개념을 좀 더 확실히 공부해야 할 필요가 있음. Learngitbranching.js.org 위의 사이트에서 쉽게 git과 친해질 수 있다. 내가 잊지 않기 위해 남겨둠. 160222 추가 내용 git branch 이름 브랜치 생성하기 git branch 브랜치들 보기
해당 내용은 김영한 님의 '모든 개발자를 위한 http 웹 기본 지식' 강의를 보고 정리한 내용입니다. (업데이트 중입니다) 틀린 부분이 있다면 언제든지 지적해주시면 감사하겠습니다.🙏🏻 인터넷통신 IP(인터넷 프로토콜) 지정한 ip주소로 데이터를 전달. 패킷이라는 단위로 전달. Ip 패킷: 내 아이피와 목적지 아이피, 메시지가 담긴 ip 패킷을 던지면 노드에서 노드로 이동을 해가면서 목적지 아이피를 찾다가 도달. IP 프로토콜의 한계 비연결성 비신뢰성 프로그램 구분.. 인터넷하면서 음악도 듣고 이러는데 이때 어떻게 구분을 할 것인가? 패킷 소실, 패킷의 전달 순서 문제 발생 -> 이런 문제를 해결해주는게 tcp, udp 인터넷 프로토콜 스택의 4계층 애플리케이션 계층 - http, ftp 전송계층 - tcp, udp 인터넷계층 - ip 네트워크 인터페이스 계층 Tcp 는 전송제어 프로토콜 연결지향
스스로 부족한 것을 채우기 위한 학습 기록입니다. 부족함을 알고 채워나가려 노력하고 있습니다. 피드백은 언제나 환영합니다.😺 해당 포스팅은 참고란의 블로그와 동영상의 내용이 많이 참고되어 작성 되었습니다. 가상 메모리 가상 메모리란? 메모리를 관리하는 방법의 하나로 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식. 가상 메모리를 사용하는 이유? 가상 메모리를 이용하면 실제 물리 메모리가 가지고 있는 크기를 논리적으로 확장하여 사용할 수 있다. 프로세스들에게 동일한 메모리 공간을 제공할 수 있다. 가상 메모리를 사용하게 되면 유저는 OS가 제공해주는 가상 메모리 영역만 이용하면 된다. 나머지 관리는 OS내부에서 처리 된다. 메모리 관리에 효율적이다: 가상 메모리를 이용하면 연속적이지 않은 메모리를 논리적으로 연속적인 메모리 형태로 사용 가능하다. Swapping 프로세스를 일시적으로 메모리에서 내리고 하
스스로 부족한 것을 채우기 위한 학습 기록입니다. 부족함을 알고 채워나가려 노력하고 있습니다. 피드백은 언제나 환영합니다.😺 같은 부분을 이틀에 걸쳐 학습해서 하나의 TIL에 작성함 메모리에 어떻게 올라갈까? OS가 있으면 OS에서 프로그램을 실행! 메모리에 프로그램이 올라가면 그것이 프로세스! 다시 정리하자면 실행파일이 있다면 실행 파일을 실행하면 운영체제가 프로그램의 정보를 읽고 메인 메모리에 공간을 할당한다. 그리고 프로그램 코드(함수, 변수 등등등)들을 메모리에 읽고 쓰면서 동작을 한다! 아래의 메모리 구조는 메모리에 어떻게 올라가는지 알아보기 위해서 살펴본다! 📌 프로그램은 저장장치에 있는 정적 상태, 프로세스는 실행을 위해 메모리에 올라가는 동적상태 메모리 구조 <img src = https://t1.
스스로 부족한 것을 채우기 위한 학습 기록입니다(a.k.a 개인공부). 부족함을 알고 채워나가려 노력하고 있습니다. 피드백은 언제나 환영합니다.😺 클래스와 객체, 인스턴스 (객체와 인스턴스 비교) 지금까지 클래스와 객체는 붕어빵틀과 붕어빵으로 이해하고 있었는데 한번 더 가볍게 정리하고 넘어가고자 한다. 클래스: 설계도. 예를 들면 자동차의 특성과 기능들을 정의해 놓은 것. 연관되어 있는 메소드와 변수의 집합. 객체(Object): 구현해야 할 대상. 자동차라면 소나타, 카니발 같은 것들이 객체가 될 수 있다. 메모리 할당 전. 인스턴스(Instance): 클래스를 통해서 객체가 구현이 된 것. 메모리 할당된 상태. 객체대로 뽑아 낸 것이 인스턴스라고 생각해서 붕어빵이라고 생각했다. 상속과 다형성 상속: 조상과 자손. 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것. 이를 통해 적은 양의 코드로 새로운 클래스를 작
스스로 부족한 것을 채우기 위한 학습 기록입니다. 부족함을 알고 채워나가려 노력하고 있습니다. 피드백은 언제나 환영합니다.😺 Linked List ArrayList와의 차이점 ArrayList는 각각의 데이터들이 다닥다닥 붙어 있는 형태이고 LinkedList는 각각의 데이터들이 떨어져있으나 어떤 것(교점?)으로 인해 연결되어 있는 형태라고 생각하면 된다. |구분|Linked List|ArrayList| |--|--|--| |조회|느림|빠름| |삽입|빠름|느림| LinkedList는 노드(마디, 교점 또는 vertax:꼭지점)이 있다. LinkedList의 head는 첫번째 노드가 무엇인지를 알고 있다. String Builder (오늘 구현하다가 String builder를 쓰게 되었는데 정리하고 넘어가야 할 것 같아서 남긴다.) String과 String을 더할 때 (이어 붙일때) 쓴다. (이름 그대로 String Builder) 이
스스로 부족한 것을 채우기 위한 학습 기록입니다. 부족함을 알고 채워나가려 노력하고 있습니다. 피드백은 언제나 환영합니다.😺 유닉스와 리눅스 유닉스 유닉스(영어: Unix)는 교육 및 연구 기관에서 즐겨 사용되는 범용 다중 사용자 방식의 대화식, 시분할처리 시스템용 운영 체제이다. 1970년대 초반 벨 연구소 직원인 켄 톰슨, 데니스 리치 등이 소형 컴퓨터용으로 처음 개발하였다. 오늘날의 유닉스 시스템은 여러 회사들과 비영리 단체들이 이 커널로 활용하여 다양한 운영체제를 개발하고 있다. 유닉스는 처음부터 다양한 시스템 사이에서 서로 이식할 수 있고, 멀티 태스킹과 다중 사용자를 지원하도록 설계되었다. 유닉스 시스템은 다음과 같은 개념을 가지고 있다. > 일반 텍스트 파일, 명령행 인터프리터, 계층적인 파일 시스템, 장치 및 특정한 형식의 프로세스 간 통신을 파일로 취급 등. > 소프트웨어 공학 측면에서, 유닉스는 C의 사용과 유닉스 철학이라