목록전체 글 (77)
땃쥐네
이 글은 [Spring MVC] 서블릿(Servlet)이란? 에서 이어집니다. 결국 스레드마다 자바코드가 실행된다. 요청당 스레드! 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 스레드입니다. 실제로 JVM(Java Virtual Machine)의 Runtime Data Area를 확인해보면 각 스레드마다 stack, pc register, native method stack 을 할당받습니다.(JVM 구조 및 각 요소들의 역할에 대해서는 이 포스팅의 영역을 벗어나므로 다루지 않겠습니다.) 어떤 자바 코드든 결국 스레드 위에서 동작합니다. java 애플리케이션을 실행하면 main이라는 이름을 가진 스레드가 생성되고 main 메서드는 main 스레드의 스택 프레임에 올려져 여기서 자바 코드가 한 줄 ..
서블릿 학습의 필요성 Spring MVC를 이용하면 웹 애플리케이션 구현을 매우 손쉽게 할 수 있습니다. 하지만 이 Spring MVC는 서블릿이라는 오래된 자바 표준 기술을 기반으로 동작합니다. 따라서 Spring MVC에 대해 깊은 이해를 하기 위해서는 우선 Servlet을 이해할 필요가 있습니다. 요청과 응답은 Http 메시지를 통해 이루어진다. 요즘 사용되는 웹 애플리케이션 대 부분은 Http 프로토콜을 기반으로 동작합니다. Http 프로토콜에서 정해진 사양에 따라 Http 메시지를 작성하고 HTML 문서, 단순 텍스트, 이미지, 음성, 영상, 파일, JSON, ... 등등 다양한 형태의 데이터를 끊임 없이 빠르고 간편하고 정확하게 주고받을 수 있습니다. 이 프로토콜에서 정의된 방식대로 Http ..
파일에 대한 권한 설정을 학습하게 된 계기 팀 프로젝트 과정에서, 배포 ec2에서 현재 nginx가 가리키는 포트를 기록하였다가 변경이 일어날 때마다 변경된 포트로 저장값을 갱신하는 파일을 별도로 생성해 관리하고 있었습니다. (/home/ec-user/service_url.inc) 위의 스크립트를 보시면 service_url.inc의 파일 내용을 변경하는 내용이 스크립트에 있습니다. 아무 생각 없이 sudo 명령어로 해당 파일을 파일을 생성하고, 배포 실행 스크립트를 진행했다가 뜻하는대로 포트가 변경되지 않던 문제가 있었습니다. 왜 그랬는가 따져보니, 해당 대상 파일을 root 사용자가 생성했고 해당 파일에 쓰기 권한이 없었기 때문입니다. 저는 이 과정에서 매우 삽질을 했고 파일에 대한 권한 부여 설정에..
1. gradle로 프로젝트 생성 - 빌드툴을 사용해서 프로젝트를 생성한다. - 빌드툴을 사용하는데는 여러가지 목적이 있는데 각종 라이브러리를 떙겨오기 편하도록 하기 위함. - 빌드툴을 통해 실행환경에서 외부 라이브러리를 어디서 무엇을 끌어올지 지정해 줄 수 있고, 자동으로 끌어올 수 있을 것. - 코드를 기반으로 라이브러리 의존성을 편리하게 관리할 수 있게 되고 github과 같은 원격 리포지토리를 통해 소스 파일을 clone 한 개발환경에서 별도의 외부 라이브러리를 끌어쓰지 않아도, 동일환경에서 실행할 수 있기 때문에 많이들 이를 사용하는 것 같다. 2. build.gradle 에서 assertJ 라이브러리 의존성 추가 testImplementation("org.assertj:assertj-core:..
* 주의 : 다른 사람들과 협업을 하시는 개발자분들은 따라하지마세요. 초창기에 백준 2438번 문제를 풀었던걸, 다시 최적화해서 풀면서 새로운 디렉토리로 옮기는 작업을 함께 진행하고 있다. 37bbeef 커밋 뒤에 b0054d9 커밋을 두고 이를 병합시키려면 어떻게 하면 될까? 현재 HEAD 기준으로 상위 3개까지의 커밋의 역사를 개변해야한다. 즉, 현재 HEAD가 가리키는 커밋 기준 4단계 상위의 부모를 기준으로 다시 기존 커밋들을 리베이스 해야한다. 이때는 대화형 rebase 명령을 이용하면 처리하면 편하다. git rebase -i [커밋명] 명령은, 현재 HEAD가 가리키고 있는 브랜치를 지정 커밋을 기준으로 대화형 rebase 시키는 명령이다. git rebase -i HEAD~4 여기서 37b..
빌드 gradle 기준 Windows 기준 사전 설정 git bash 이용하기 : Git Bash는 linux의 터미널 명령어를 사용할 수 있음. intelliJ 기본 터미널을 Git Bash로 지정하기 : IntelliJ 기준 File > Tools > Terminal에서, Application Settings > Shell path에 다음을 지정 후 intelliJ 재실행 "git 설치경로\bin\sh.exe" -login -i 터미널 실행 시 바로 프로젝트 경로가 불러와짐 빌드 및 실행 ./gradlew build : build 폴더 아래에 빌드함 cd build/libs : 프로젝트 폴더 아래의 build/libs로 이동 java -jar 파일명.jar : 빌드된 jar 파일 실행 빌드 제거, 다..
개발환경 JDK 11 이상 IDE : IntelliJ 프로젝트 생성하기 start.spring.io에서 Spring 프로젝트 생성 설정법 Project : Gradle Project Language : Java Spring Boot : SNAPSHOT, M1(미정식 버전)과 같은 문자가 안 붙은 버전들 중 최신 버전 Project Metadata Group : 주로 기업 그룹, 도메인 artifact, name : 빌드 결과물의 이름 Packaging : Jar Java : 11 Dependencies (의존 라이브러리) Spring Web Thymeleaf 가져오기 받은 zip 파일을 풀기 IntelliJ에서, File - Open에서 build.gradle을 선택하여 프로젝트 Open 프로젝트 폴더 ..
입력소스로부터 문자 데이터를 읽어오는 목적으로 사용되는 클래스 JDK 1.5부터 추가됨. 기존 입력 방식에서 불편했던 부분을 개선. 성능은 약간 떨어지는 부분이 있긴 하다. 정규식(Regular expression)을 이용한 라인단위 검색 지원 구분자(delimimeter)에 정규식 표현을 사용할 수 있어서 복잡한 형태의 구분자도 처리 가능 1. 생성 1) import문 import java.util.Scanner;2) 생성자 입력 소스에 따라 여러가지 생성자를 지원함 Scanner(String source) Scanner(File source) Scanner(InputStream source) 예) 화면 입출력 시 Scanner(System.in)을 생성하면 됨. Scanner (Readable sou..