전체 글 385

[SQL] SELECT문의 실행 순서

SELECT문은 다음과 같은 순서로 작성되어야 한다.  1. SELECT  2. FROM  3. WHERE  4. GROUP BY  5. HAVING  6. ORDER BY  7. LIMIT    그러나 다음과 같은 순서로 실행된다.  1. FROM: 대상으로 하는 테이블  2. WHERE: 조건을 만족하는 행  3. GROUP BY: 대상을 기준으로 묶어 하나의 행으로 보여줌  4. HAVING: GROUP BY에서 묶어진 값들 중에서 조건을 만족하는 그룹  5. SELECT: 모든 또는 선택한 열을 조회                    (SELECT 절에서 AS를 설정하므로 이를 기점으로 AS 처리된 이름 사용 가능)  6. ORDER BY: 열을 기준으로 기준에 따라 오름차순 또는 내림차순 정렬 ..

DB/SQL 2024.07.28

[일상] 문과 비전공자 백엔드 지향 개발자 취업준비 근황

이런 기분은 오랜만이다. 너무 딱딱한 제목인가. 하지만 이 글의 내용을 가장 잘 표현해주는 문장이다. 몇 달째 글을 작성하지 않아서 혹시 이 사람도 포기한 게 아닐까 하는 의심이 있을까봐서 미리 선수치는 것이기도 하다. 본론부터 말하자면 나는 제법, 어쩌면 아주 잘 살고 있다. 누군가는 내 근황이 궁금하지 않을지도 모르겠지만 이 블로그의 방문자가 꾸준히 있다는 건 그만큼 개발 공부를 열심히 하는 사람들이 많다는 뜻일 듯도 해서, 문과 비전공생이 개발자 도전기를 간략하게 풀어보고자 한다.  작년 3월에 개발 온라인 학원을 다니기 시작해서 9월 말 무렵에 끝이 났다. 본격적으로 취업 시장에 뛰어든 건 올해 초부터였는데 이력서부터 자소서까지 개발괴발로 써서 지원한 수십 군데 모두 칼같이 떨어졌다. 어쩌다 면접..

일상 2024.06.19

화이트박스 테스트(White Box Test)와 블랙박스 테스트(Black Box Test)

화이트박스 테스트(White Box Test)란 모듈의 원시 코드를 오픈시킨 상태에서 프로시저 설계의 제어 구조를 사용하여 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법이다. 프로그램의 제어 구조에 따라 선택, 반복 등의 분기점 부분들을 수행하여 논리적 경로를 제어한다. 설계된 절차에 초점을 두며 테스트 과정의 초기에 적용된다. 모듈 안의 동작을 직접 관찰한다. 화이트박스 테스트는 절차적 설계의 논리적 복잡성을 측정하는 기초 경로 검사(Base Path Testing)와 제어 구조 검사(Control Structure Testing) 등이 있다. 제어 구조 검사는 다시 여러 가지로 나눌 수 있는데, 모듈 내 논리적 조건을 테스트하는 조건 검사(Condition Testing)..

설계 2024.02.05

모듈(Module)

소프트웨어의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능을 모듈(Module) 단위로 분리한다. 모듈은 단독으로 컴파일과 재사용을 할 수 있다. 결합도(Coupling)와 응집도(Cohesion)로 모듈의 독립성을 측정할 수 있으며, 결합도는 약하고 응집도가 높으면 소프트웨어의 품질이 높다. 결합도 약함 ↕ 강함 자료 결합도 (Data Coupling) 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도 스탬프 결합도 (Stamp Coupling) 모듈 간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달될 때의 결합도 제어 결합도 (Control Coupling) 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호를 이용하여 통신하..

설계 2024.02.02

[JPA] Soft Delete와 @SQLDelete

데이터베이스에서 데이터를 삭제할 때 정책에 따라 Hard Delete와 Soft Delete로 나눌 수 있다. Hard Delete는 물리 삭제, Soft Delete는 논리 삭제로도 부른다. 물리 삭제는 데이터베이스 상에서 완전히 제거하는 것이고, 논리 삭제는 데이터를 남겨두되 컬럼을 별도로 만들어서 삭제 여부를 확인하는 것이다. 보통 삭제일시 컬럼의 null 여부 또는 삭제여부 컬럼의 true와 false 값을 확인한다. 논리 삭제의 경우에는 데이터를 삭제하지 않으므로 결과적으로는 특정 컬럼을 update 한다. 이때 @SQLDelete 라는 어노테이션을 유용하게 사용할 수 있다. 이 어노테이션은 데이터를 삭제하는 로직을 작성하면, 데이터를 삭제하는 대신에 미리 설정한 특정 컬럼의 값을 변경해준다. ..

DB/JDBC & JPA 2024.01.31

[JPA] @CreatedDate와 @LastModifiedDate

어떤 정보를 관리할 때 데이터의 생성된 날짜와 수정된 날짜를 저장해야되는 경우도 있다. 일일이 저장할 수도 있겠지만, 이 어노테이션을 이용하면 별도의 코드 없이도 자동으로 저장하게 할 수 있다. @CreatedDate는 데이터의 생성일을, @LastModifiedDate는 데이터의 마지막 수정일을 저장한다. 이 어노테이션들은 다음과 같이 사용할 수 있다. import jakarta.persistence.Entity; import jakarta.persistence.EntityListeners; import java.time.LocalDateTime; import org.springframework.data.annotation.CreatedDate; import org.springframework.data..

DB/JDBC & JPA 2024.01.29

[네트워크] URI(uniform resource identifier)

도메인(domain)이란 인터넷에 연결된 컴퓨터를 사람이 쉽게 기억하고 입력할 수 있도록 문자(영문, 한글 등)로 만든 인터넷주소를 뜻한다. 일반적으로 사람이 인터넷 프로토콜 주소(http://168.192.0.0 등)를 외우기는 어렵기 때문이다. 따라서 도메인을 이용하여 사람이 인터넷에 접근하기 쉽도록 하는데, 이에 URI(uniform resource identifier)가 쓰인다. URI란 통합 자원 식별자로, 정보 리소스를 고유하게 식별하고 위치를 지정할 수 있는 것이다. HTTP는 주어진 URI로 객체를 찾아오는데, URI는 프로토콜, 서버, 리소스를 모두 명시하고 있다. 이는 URL(uniform resource locator)과 URN(uniform resource name)으로 나눌 수 있..

[Java] 접근 제어자(access modifier)

접근 제어자(access modifier)는 한 번에 네 가지 중 하나만 선택할 수 있다. 클래스, 멤버변수, 메서드, 생성자에 사용되며, 해당하지 않는 외부에서의 접근을 막는다. 외부로부터 데이터를 보호하고(데이터가 유효한 값을 유지하고 외부에서 함부로 변경할 수 없도록), 내부에서만 사용되어 외부에는 불필요한 데이터를 감추기 위해 사용한다. private: 같은 클래스 내에서만 접근할 수 있다. default: 같은 패키지 내에서만 접근할 수 있다. protected: 같은 패키지 내 다른 패키지의 자식 클래스에서 접근할 수 있다. public: 모두 접근할 수 있다. 제어자 같은 클래스 같은 패키지 자식 클래스 전체 public O O O O protected O O O X (default) O O..

Java 2024.01.24

[Java] 제어자(modifier)

제어자(modifier)는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 클래스나 멤버변수와 메소드에 주로 사용되며, 여러 제어자를 조합하여 사용할 수 있다. static 인스턴스에 관계없이 같은 값을 가지며 변수 하나를 모든 인스턴스가 공유한다. static이 붙은 멤버변수, 메소드, 초기화 블럭은 인스턴스를 생성하지 않고도 사용할 수 있다. 이를 사용하면 인스턴스를 생성하지 않으므로 편리하고 속도도 더 빠르다는 장점이 있다. final 거의 모든 대상에 사용할 수 있다. 변수에 쓰면 값을 변경할 수 없고, 메소드에 쓰면 오버라이딩을 할 수 없고, 클래스에 쓰면 부모가 될 수 없다. 일반적으로 선언과 초기화를 동시에 하지만, 인스턴스 변수는 생성자에서 초기화 할 수 있다..

Java 2024.01.22

[Java] 오버로딩(overloading)과 오버라이딩(overriding)

오버로딩(overloading)과 오버라이딩(overriding)은 명칭은 비슷하지만 사용하는 상황과 용도는 엄연히 구분된다. 오버로딩은 메소드명은 같지만 매개변수의 개수 또는 타입이 다른 것을 의미한다. 컴파일 시 메소드의 이름이 같아도 다른 매개변수로 메소드를 구분할 수 있다. 그러나 오버라이딩은 상속받은 메소드의 내용에 관한 것이다. 상속받은 클래스가 클래스 자신에 맞게 메소드의 내용을 변경하는 경우이다. 오버라이딩을 사용하기 위해서는 상속받은 메소드의 이름과 매개변수와 반환타입이 모두 같아야만 한다. public class Parent { void parentMethod() {} } public class Child extends Parent { void parentMethod(int i) {} ..

Java 2024.01.19