✨시작하며 이클립스에서 코드를 누가 수정했는지 확인하려면 어떻게 해야할까? 그 방법에 대해 알아보자! History 먼저 History View가 있다. History를 통해 변경사항을 추적하는 화면은 아래처럼 보인다. 하지만 이렇게 하면 현재 수정중인 코드의 특정 라인을 누가 수정했는지 추적하기 힘들어진다. 그럴 때는 이클립스의 Git Blame같은 기능을 사용하면 된다! Show Revision Information(Git Blame) 추적을 원하는 파일을 실행한 후, 단축키 CTRL + F10을 누른다. 나타나는 창에서 Show Revision Information을 누른다. 이후 OK를 눌러주면 아래처럼 좌측 코드라인에 색이 추가된다. 라인에 커서를 가져가면 해당 라인에 대한 변경사항이 나타난다...
Mybatis에서 동적 SQL 작성에 필수적인 ${}와 #{}의 차이점과 사용 방법을 설명한다. ${}는 문자열 치환으로 SQL Injection 위험이 있어 안전하지 않다. 반면, #{}는 PreparedStatement를 이용한 값 바인딩으로 SQL Injection을 방지하며, 안전하고 디버깅이 쉽다. 일반적으로 보안을 위해 #{} 사용이 바람직하다. ✨시작하며 Mybatis는 데이터베이스와의 상호 작용을 돕기 위해 동적 SQL 작성에 유용한 기능을 제공해 준다. 여기서 주로 사용되는 $과 #의 차이점에 대해 알아두고, 상황에 따라 적절한 방법으로 사용하는 것이 좋겠다고 생각되어 정리하게 되었다. ${}와 그 사용 예시 ${}은 파라미터가 문자열로 치환되기 때문에 SQL Injection이 발생할 ..
기본적으로 HTTP는 텍스트로 데이터를 주고받는 통신 규약으로, 보안성이 약하다. 반면, HTTPS는 SSL 프로토콜을 이용해 암호화된 데이터를 주고받아 보안성이 강화되어 있다. 이 글에서는 클라이언트-서버 모델, HTTP 메서드, SSL과 TLS 등에 대해 설명하며, HTTP와 HTTPS의 차이점을 명확히 이해할 수 있게 도와준다. ✨시작하며 URL을 확인하면 http 이후 s가 붙어있을 때도, 붙어있지 않을 때도 있다. HTTP와 HTTPS는 대체 무슨 차이가 있을까? 클라이언트-서버 모델 클라이언트-서버 모델은 웹 통신에서 클라이언트(일반적으로 웹 브라우저)가 서버에 요청을 보내고, 서버는 요청을 처리한 후 클라이언트에 응답하는 방식으로 작동한다. 예를 들어, 클라이언트가 웹 페이지를 불러오는 것이..
parameter는 함수 정의 시 사용되는 변수로, 함수와 메서드의 입력 변수명을 의미한다. 반면, argument는 함수 호출 시 넘기는 변숫값을 의미한다. 또한, 인수와 인자는 같은 말이지만, 매개변수와 인자(인수)는 다른 말이라는 것을 잊지 말아야 한다. ✨시작하며 개발을 공부하며 헷갈려했던 parameter와 argument의 차이에 대하여 정리해 보았다. Prameter(매개변수) 함수와 메서드 입력 변수명(Variable)으로, 함수 정의 시 사용되는 변수를 말한다. function plus (num1, num2) { return num1 + num2; } 여기서 num1과 num2는 parameter이다. Argument(인자) 함수와 메서드의 입력 값(Value)으로, 함수 호출 시 넘기는..
게시글의 예약번호 첫 글자가 3인지 아닌지를 charAt을 사용해 판별하던 중 문제가 발생했다. 이를 해결하기 위해 java.lang.String 클래스의 substring() 메서드를 활용하여 예약번호 첫 글자를 잘라내고, 비교 연산자를 사용해 3인지 아닌지를 검증했다. 이 과정에서 ==와 eq의 사용에 대한 고민이 있었으나, GPT의 조언을 따라 특정 상황에서 둘 중 어느 것을 사용해도 큰 차이가 없음을 알게 되었다. ✨시작하며 전자정부 프레임워크에서 프로젝트 수행 중 게시글의 예약번호의 첫 글자가 3일 경우와 아닐 경우를 charAt을 사용해 구분해주었다. charAt을 사용해 구분하는 것이 잘못된 방법이었는지 예약번호의 첫 글자가 3임에도 계속 eq쪽 jstl이 아닌 ne쪽 jstl을 탔다. 그래..
Board Name을 확인하고 비회원을 처리하는 과정에서 문자열 비교를 위해 == 연산자를 사용했으나, 에러가 발생하고 말았다. 문자열을 비교할 때는 == 연산자 대신 equals 메서드를 사용해야 한다는 것을 알게 되었다. == 연산자는 객체의 주소 값을 비교하는 반면, equals 메서드는 객체의 값 자체를 비교하는 차이가 있다. ✨시작하며 전자정부 프레임워크 기반 프로젝트 중 게시판 Board Controller에서 Board Name이 지정한 값과 동일할 경우 해당 게시판에서 session값 검증을 통해 비회원을 따로 처리하는 조건문을 만들었다. 그런데 여기서 == 연산자를 사용하여 문자열을 비교하는 바람에 비회원일 경우에도 if문에 걸리지 않고 게시판 화면으로 정상적으로 넘어가버렸다. 기존의 코..
filterMultipartResolver를 거치면서 lucy 필터가 적용되지 않아 web.xml에 multipartFilter를 추가하였으나, 이로 인해 첨부파일 업로드 시 500 에러가 발생하였다. 이를 해결하기 위해 server.xml 및 context.xml을 수정하였다. server.xml은 서버의 실행 시점에 동작을 준비하는 xml 문서로, context-path 설정이 가능하다. 반면 context.xml은 웹 어플리케이션의 지원을 명시해주는 파일로, 웹을 읽어 실행하고 DB를 연결하는 기능을 수행한다. ✨시작하며 전자정부 프레임워크에서 프로젝트 수행 중 lucy-xss-servlet-filter를 사용해 XSS 취약점을 조치 하는데 filterMultipartResolver를 거치게 되면 ..
클래스, 메서드, 인스턴스 등의 기본 개념과 활용 예시를 다루며, 각각의 용어가 어떻게 코드 내에서 작동하는지를 이해하는 데 도움을 준다. 이를 통해 절차 지향 프로그래밍에서 객체 지향 프로그래밍으로의 전환이나 코드의 가독성 향상, 중복 선언을 피하는 방법 등에 대해 배울 수 있다. 또한, 클래스와 인스턴스의 차이, static의 사용, 생성자와 this의 활용 등에 대한 설명도 포함되어 있다. OOP 객체 지향 프로그래밍(OOP, Object Oriented Programming)은 클래스를 중심으로 프로그램의 구조를 만들어나가는 컴퓨터 프로그래밍 방법론을 의미한다. 이런 방법론을 언어 차원에서 제공하는 언어를 객체 지향 언어라고 한다. 또, 메서드를 다른 컴퓨터 언어에서는 function이나 subr..
람다 표현식을 통한 함수형 프로그래밍, 스트림 API를 사용한 데이터 추상화, java.time 패키지를 이용한 날짜와 시간 API의 변화, 그리고 나즈혼을 통한 자바스크립트 엔진의 변화 등에 대해 자세히 알아볼 수 있다. 각 기능의 특징과 예시를 통해 Java8의 변화와 발전을 이해하는 데 도움을 준다. 특히, 기존 방식과 비교하여 Java8에서 어떤 개선점이 생겼는지에 대해 집중적으로 다루고 있다. Java8 람다 표현식 (Lambda Expression) 함수형 프로그래밍 식별자 없이 실행할 수 있는 함수 표현식으로, 익명 함수 (anonymous function)라고도 부른다. 메소드를 람다 표현식으로 표현하면 클래스를 만들고 객체를 생성하지 않아도 메소드를 사용할 수 있으며 메소드의 매개변수로 ..
운영체제와 독립적으로 실행되는 자바의 특징, 자바 컴파일러와 바이트 코드, 자바 가상 머신(JVM)의 역할과 구성, 그리고 자바 프로그램의 구성 요소인 클래스, 필드, 메서드 등에 대해 설명하고 있다. 또한, 표준 입출력 클래스와 명령문, 주석 등의 사용 방법도 소개하고 있다. Java 운영체제와 독립적 실행 타 언어에 비해 쉬운 난이도 타 언어에 비해 높은 안정성 연산자 오버로딩 금지로 인한 코드 가독성 향상 (제네릭 도입) 타 언어에 비해 느린 실행 속도와 긴 길이의 코드 썬 마이크로시스템즈(Sun Microsystems)사의 제임스 고슬링(James Gosling) 팀에 의해 개발된 객체 지향 프로그래밍 언어로, JVM(Java Virtual Machine)이라는 자바 가상 머신을 사용해 운영체제와..
브랜치의 생성, 이동, 삭제, 병합 등의 기본 명령어부터, master, develop, feature, release, hotfix 등 다양한 브랜치의 역할과 용도에 대해 상세히 알려준다. 브랜치 관리에 대한 이해를 돕기 위해 각 브랜치의 작업 흐름과 사용 시나리오도 함께 설명하고 있다. Branch Command 생성 git branch branch 생성 git checkout -b branch 생성하며 이동(checkout) 이동 git checkout 선택한 branch로 이동 삭제 git branch -d[-D] local branch (강제) 삭제 git push -d[-D] origin remote branch 삭제 병합 git merge 현재 branch에서 해당 branch의 수정사항 가..
Git의 개념, Repository의 구조, Init, Clone, Add, Commit, Commit Message, Push, Branch, Issue 등의 Git 작업 흐름과 용어에 대한 정의와 사용 방법을 상세히 알려준다. Git 분산 버전 관리 시스템을 말한다. 자세한 내용은 아래를 참고하자. Git과 GitHub의 차이는 무엇일까? Git 버전 관리 프로그램 오픈 소스 버전 관리 시스템(VCS, Version Control System) 로컬 버전 관리 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분 xog9.kr Repository 나의 remote repository 타인의 remote repository 나의 local repository..
Git은 로컬에서 파일의 변경사항을 추적하고 여러 사용자 간의 작업 조율을 위한 도구로, 리눅스 커널 개발을 위해 리누스 토르발스가 개발했다. 반면 GitHub은 Git 저장소 호스팅을 지원하는 웹 서비스로, 클라우드 서버를 활용해 로컬 버전 관리를 가능케 한다. Git 버전 관리 프로그램 오픈 소스 버전 관리 시스템(VCS, Version Control System) 로컬 버전 관리 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템으로, 리눅스 커널 개발을 위해 리누스 토르발스가 2005년에 처음으로 개발하였다. GitHub 원격 저장소(버전 관리, 소스 코드 공유, 분산 버전 제어 등) 웹 기반 호스팅 서비스 클라우드 서버를 이용해 ..
npm은 Node.js의 모듈을 패키지로 만들어 관리하고 배포하는 역할을 한다. package.json은 프로젝트가 의존하는 패키지의 리스트, 프로젝트 버전 등을 명시해 프로젝트의 의존성을 관리하고, 다른 개발자가 쉽게 사용할 수 있게 한다. npm Node Package Manager의 약자로, Node.js를 위한 패키지 매니저이자 Node.js를 위한 오픈소스 생태계이다. 이는 Node.js에서 사용되는 모듈들을 패키지로 만들어 관리, 배포하고 있다. package.json 기본적으로 package.json은 문서이다. 개발자가 배포한 패키지에 대해 다른 사람들이 관리하고 설치하기 쉽게 하기 위한 문서이다. 또, npm에 패키지를 배포하고 npm registry에 올리기 위해 반드시 필요한 문서 파..
본 포스트는 드림코딩님의 자바스크립트 기초 강의 (ES5+)를 수강 후 정리한 노트입니다. Scope Block scope 블럭 밖에서는 블럭 안의 내용을 볼 수 없게 된다. Global scope 필요한 부분에서만 정의해서 쓰는 것이 좋다. let vs var let ES6에서 추가되었다. 중복 선언이 불가능하다. 값의 재할당이 가능하다. 선언된 변수는 전역객체의 프로퍼티가 아니다. var 중복 선언이 가능하다. 값의 재할당이 가능하다. 선언된 변수는 전역객체의 프로퍼티다. 어디에 선언했냐에 관계없이 항상 제일 위로 선언을 끌어 올려주는 hoisting이 발생한다. mutable vs immutable mutable let 변할 수 있는 값을 뜻하며, 계속해서 변하는 값을 정의할 때 사용한다. immu..