분류 전체보기(103)
-
시간복잡도 측면에서 바라본 선형구조의 자료형 (선형 리스트, 순차 리스트)
학교 공부를 통해 막연하게 생각했던 자료구조와 알고리즘에 대해 자세히 알게 됐다. 한줄로 간단하게 요약하자면 자료구조와 알고리즘은 '시간복잡도와 공간복잡도를 효율적으로 사용하기 위한 탐색, 정렬 방법과 그에 적절한 자료형을 사용하는 것' 을 배우는 것이다. 내가 알고 있는 Java언어에 빗대어 선형구조의 자료형을 알아보자. 선형 구조란 자료형이 순서를 가지고 있는 것이다. 여기서 순서란 물리적 순서와 논리적 순서를 구분하지 않는다. 즉 어디에서든 순서가 있으면 된다는 것이다. 물리적 순서는 메모리에 저장돼있는 자료형의 데이터를 말하고 논리적 순서는 코드로 동작할 때 접근하는 순서라고 생각하면 된다. -순차리스트와 선형리스트의 내부 구조 Java에서 Array(배열, 순차리스트)은 인덱스를 가지고 있고 L..
2023.10.18 -
Ubuntu Linux Server에서 apache Tomcat을 이용해 웹 띄우기
AWS에서 서버를 띄우는 것은 인스턴스의 이미지를 뭘 선택하느냐에 따라 달라지지만 일반적으로는 Ubuntu를 사용한다. 따라서 ubunut 서버를 가상환경(VM)에 띄우고 로컬에서 서버를 띄우는 것을 실습한다. - 가상환경 선택(VirtualMachine) 도커나 UTM, Parrels와 같은 OS 가상환경을 제공하는 어플리케이션을 사용한다(필자는 Parrels 사용) - 실습환경 Mac OS 13(Ventura OS) M1 Air(2020) Intel X OS를 가상환경에 설치하기 위해서는 Ubunut 공식 사이트에서 iso파일을 다운받아야 한다. 이 때 본인의 운영체제에 맞는 이미지 파일을 다운받아야 설치가 정상적으로 진행된다. https://ubuntu.com/download/server Get U..
2023.10.16 -
[Java, JavaScript] 웹 소켓을 이용해 다중 1대1 채팅방 구현하기(DB 연동)
개발 환경 : Spring boot 2.7.6 (JPA), mysql, javascript(ajax) 팀 프로젝트 중 채팅을 구현해야 할 일이 생겼다. 채팅을 간단하게 1대 다 혹은 1대1 로만 구현하는 것은 굉장히 쉬워보였으나 내가 원하는 기능은 '1대1 대화가 서로 서로 가능한 채팅방 구현'이었다. 이게 된다면 1대다, 다대다도 비슷한 원리로 모두 가능하다. 그러나 우선은 내가 필요한 기능은 1대1로 서로 구분된 채팅을 하는 것이었다. 이를 위해서 우선 socket의 원리에 대해 이해해야 했다. 내 막연한 상상으로는 하나의 포트번호에서 여러개의 소켓으로 서로 다른 통신을 한다는 것이 불가능해보였기 때문이다. 그러나 엔드포인트를 다르게 둔다면 같은 포트에서도 충분히(당연한건지 모르겠으나) 가능한 일이었..
2023.09.20 -
[Mac] bash_profile로 환경변수 설정하기
Mac에서 환경변수를 제대로 설정해본 기억은 별로 없는듯하고 아직도 텍스트 편집기(vi, nano)에 익숙하지 않기 때문에 관련 내용을 정리해보고자 한다. 다음과 같은 순서로 명령어를 입력한다. $ cd $ ls .bash_profile $nano .bash_profile 이까지 완료했다면 터미널에서 텍스트 편집기가 열릴 것이다. 그리고 설정하고자 하는 환경변수 경로를 등록한다. PATH:등록하고자 하는 경로명 의 형태로 작성한다. ex ) PATH:User/test/java-11/bin 그리고 컨트롤 + x -> Y -> enter 를 입력하면 편집기를 빠져나올 수 있게 된다. 아직 변경사항이 적용된 것은 아니기 때문에 다음과 같이 명령어를 한 번 더 입력한다. $ source ~/ .bash_prof..
2023.09.02 -
[github] GitHub 여러개의 브랜치로 분기시키는 법
* 병합전 *병합후 * main branch * feature1 branch 학원에서 진행하는 파이널 프로젝트 진행중 팀원들과 함께 merge를 해야할 일이 생겼다. 처음 repository를 생성하고 각자의 branch에서 작업하다가 이제 병합해야하는 과정을 거쳐야만 했는데 저장소를 생성하고 branch를 만든 것부터 내가 잘못했던 것 같아 다시 개념을 정리하고자 한다. git clone은 git init + git remote add origin + git pull origin 을 합쳐놓은 것과 같다. 즉 해당 저장소(repository)의 브랜치(git branch -b로 설정안할시 default branch main/mastr)가 가지고 있는 파일을 모두 내 로컬 저장소에 가지고 오는 것이다. g..
2023.08.28 -
[Spring-Boot] 쿼리메서드 사용 시 주의점 및 네이밍 방법
기존에는 직접 sql 문을 작성해 쿼리문을 날리곤 했었지만 spring-boot로 프로젝트를 진행함과 동시에 jpa를 사용하게 되면서 쿼리 메서드와 JPQL을 사용하게 됐다. 그러나 쿼리메서드 사용시 스네이크 케이스의 '_' 를 인식하지 못하는 탓인지 프로젝트를 실행할 때 계속 bean객체 생성에 실패하며 오류가 발생했다. Entity 클래스의 @Column으로 설정한 필드명들을 카멜케이스로 바꾼 후 다시 쿼리메서드의 이름을 카멜케이로 지정하니 오류가 해결됐다. 일반적으로 java에서는 카멜케이스를 사용할 것을 권장한다고는 한다. 현재는 팀 프로젝트가 많이 진행되지 않았기에 db의 필드명들을 모두 바꾸는 작업을 진행해줘도 되지만 만약 그렇게 하기 힘들 경우에는 @Query메서드를 이용해 JPQL을 사용하..
2023.08.20