728x90

전체 글 494

SQL 인젝션

SQL 인젝션에 대해서 알아보자 ! 1. 개념 SQL 인젝션(SQL Injection)은 웹 애플리케이션에서 사용자 입력을 제대로 검증하지 않고 SQL 쿼리에 포함시킬 때 발생하는 보안 취약점. 공격자가 의도적으로 악의적인 SQL 구문을 삽입해서 데이터베이스를 조작, 조회, 변경, 또는 삭제할 수 있다. 2. 📌 어떻게 발생하나? 예를 들어 아래와 같은 코드가 있다고 해보면SELECT * FROM users WHERE username = '$username' AND password = '$password'; 만약 사용자가 입력한 값이username: adminpassword: ' OR '1'='1 이렇게 들어오면 최종 쿼리는 다음과 같이 된다.SELECT * FROM users WHE..

개발/ETC 2025.05.22

템플릿 메소드 패턴

템플릿 메소드 패턴에 대해서 알아보자! 템플릿 메소드 패턴(Template Method Pattern)은 행동(Behavioral) 디자인 패턴 중 하나로, 알고리즘의 뼈대를 상위 클래스에서 정의하고, 일부 단계는 하위 클래스에서 구현하도록 만드는 구조. ✅ 핵심 개념 요약상위 클래스: 알고리즘 전체 구조(순서)를 정의 하위 클래스: 구체적인 단계만 재정의 (hook method 또는 abstract method) 의도: 공통 로직 재사용 + 유연한 확장 제공 ✅ 구조 예시 (Java 스타일)abstract class AbstractTask { // 템플릿 메소드 (알고리즘 전체 흐름 정의) public final void execute() { start(); ..

개발/ETC 2025.05.20

NoSQL DB 종류 알아보기

NoSQL 데이터베이스의 종류에 대해서 알아보자! 1. 개념NoSQL은 "Not Only SQL"의 약자로, 전통적인 관계형 데이터베이스(RDBMS)와 달리 정해진 스키마 없이 유연한 데이터 저장 방식을 지원하는 데이터베이스 유형이다. NoSQL은 일반적으로 대규모 분산 시스템, 빅데이터, 실시간 웹앱 등에 사용된다. 2. 종류- 문서형(Document-based) 대표 DB: MongoDB, CouchDB, Amazon DocumentDB 데이터 형식: JSON, BSON, XML 형태의 "문서" 특징: > 각 문서는 유연한 구조를 가짐 > 컬렉션 단위로 문서 관리 > RDB의 테이블+레코드 개념과 유사하지만 문서 간 구조가 달라도 됨 사용 예: 블로그 글, 사용자 프로필, 전자상거..

개발/ETC 2025.05.18

[Gradle] Gradle을 알아보자!

1. Gradle이란? Gradle은 오픈소스 빌드 도구로, 다음과 같은 특징이 있다. Groovy 또는 Kotlin DSL을 사용해서 빌드 스크립트를 작성의존성 관리: 외부 라이브러리 쉽게 다운로드하고 관리빌드 캐시, 병렬 빌드 지원: 빠른 빌드 가능유연성: 사용자 정의 태스크 추가 가능다양한 언어 지원: Java, Kotlin, Scala, Android 등 2. Gradle 주요 개념 📦 프로젝트와 태스크(Task)Gradle은 기본적으로 프로젝트 단위로 구성됨각 프로젝트에는 여러 개의 태스크(task)가 있음예: 컴파일, 테스트, 패키징, 배포 등예시// build.gradle (Groovy DSL)task hello { doLast { println '..

[Gin] Gin 시작해보자!

타입스크립트를 go로 만든다는데, 그 기념으로 go로 백엔드를 구성해보자. Go 언어를 오랜만에 공부하는데,기존 Fiber 대신 Gin을 시작해보자. 1. Gin 설치go mod init my-gin-appgo get -u github.com/gin-gonic/gin 2. 최소 실행 코드(main.go)package mainimport ( "github.com/gin-gonic/gin" "net/http")func main() { r := gin.Default() // 간단한 GET 라우터 r.GET("/ping", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"message": "pong"}) }) // 실행 r.Run(":8080") /..

개발/Go 2025.05.14

[Spring] 트랜잭션 롤백하는 예외

예외 종류에 따라서 트랜잭션 롤백이 다르게 동작한다. Spring Framework 기준으로 트랜잭션이 롤백되는 예외는 다음과 같은 규칙을 따른다. ✅ 기본 롤백 규칙예외타입트랜잭션 롤백 여부RuntimeException (또는 그 하위 클래스)O (롤백됨)ErrorO (롤백됨)Checked ExceptionX (롤백 안 됨) ❗ 예시@Transactionalpublic void someMethod() throws IOException { // IOException은 Checked Exception이므로 기본적으로 롤백되지 않음 throw new IOException("checked exception");} 위의 경우 트랜잭션은 롤백되지 않는다. @Transactionalpublic..

[Serie A] AS 로마 공부?!

토티의 팀이었던 AS 로마에 대해서 알아보자 !! 토티는 이탈리아의 前 축구 선수. 선수 시절 포지션은 공격수, 공격형 미드필더. 현역 시절 세리에 A 통산 250골을 기록하며 세리에 A 올해의 선수를 2회, 세리에 A 득점왕과 유러피언 골든슈를 1회씩 수상하였다. 또한 이탈리아 대표팀에서도 유로 2000 준우승과 2006 월드컵 우승에 기여했다. 한편으로 레알 마드리드를 비롯한 명문 클럽들의 오퍼를 모두 거절하고, 선수 경력 전체를 AS 로마에 바친 원클럽맨이기도 하다. 1편 링크 [Serie A] AS 로마를 알아보자! [Serie A] AS 로마를 알아보자!토티의 팀이었던 AS 로마에 대해서 알아보자 !! 토티는 이탈리아의 前 축구 선수. 선수 시절 포지션은 공격수, 공격형 미드필더...

스포츠/Serie A 2025.05.10

결합도 공부

1. 개념 결합도(Coupling)는 소프트웨어 설계에서 모듈 간의 의존성 정도를 나타내는 개념이다. 쉽게 말해, 한 모듈(또는 클래스, 함수)이 다른 모듈에 얼마나 많이 의존하고 있는지를 나타내며, 이는 시스템의 유지보수성, 확장성, 재사용성에 직접적인 영향을 준다. 2. 종류결합도는 일반적으로 다음과 같은 7가지 수준으로 분류된다.(낮은 결합도 → 높은 결합도 순)결합도 종류설명자료 결합(Data Coupling)한 모듈이 다른 모듈에게 단순한 데이터를 전달. 가장 바람직함.스탬프 결합(Stamp Coupling)구조체나 객체처럼 데이터 묶음을 전달, 하지만 전체가 아닌 일부만 사용.제어 결합(Control Coupling)한 모듈이 다른 모듈에 어떻게 동작할지 지시 (ex. 플래그).외부..

개발/ETC 2025.05.08

[Serie A] AS 로마를 알아보자!

토티의 팀이었던 AS 로마에 대해서 알아보자 !! 토티는 이탈리아의 前 축구 선수. 선수 시절 포지션은 공격수, 공격형 미드필더.현역 시절 세리에 A 통산 250골을 기록하며 세리에 A 올해의 선수를 2회, 세리에 A 득점왕과 유러피언 골든슈를 1회씩 수상하였다. 또한 이탈리아 대표팀에서도 유로 2000 준우승과 2006 월드컵 우승에 기여했다.한편으로 레알 마드리드를 비롯한 명문 클럽들의 오퍼를 모두 거절하고, 선수 경력 전체를 AS 로마에 바친 원클럽맨이기도 하다. 1. 역사 The beginning1927년 여름, 로마의 스포츠 애호가들에게 큰 기쁨을 안겨주며 아소차치오네 스포르티바 로마, 즉 AS 로마가 탄생했다. 이 구단은 로마를 기반으로 한 세 개의 클럽인 포르티투도-프로로마, 풋볼 ..

스포츠/Serie A 2025.05.06

[Java] Null Object Pattern 공부

1. 개념 널 오브젝트 패턴은 null을 반환하거나 사용하지 않고, 그 대신에 행동은 하지만 아무 효과가 없는 객체를 반환하거나 사용하는 방식이다. 이 객체는 실제 구현체와 동일한 인터페이스를 구현하지만, 내부 로직은 아무것도 하지 않는다. 2. 구성요소 - 인터페이스 or 추상 클래스 > 공통된 메서드 정의 - 실제 구현 클래스(Real Object) > 기능을 실제로 수행 - 널 오브젝트 클래스(Null Object) > 아무것도 하지 않는 구현체 (혹은 디폴트 동작만 수행) 예제)public interface Log { void info(String message);}// 실제 로깅 구현public class ConsoleLog implements Log { publi..

728x90