We will find a way, we always have.

-interstellar

분류 전체보기 289

[OOP] 객체지향

객체지향 프로그래밍 OOP (Object Oriented Programing) 객체지향이란 객체지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 객체들이 서로 협력하는 형태의 구조를 지향한다 객체는 각자 맡은 책임이 있고, 서로 메시지를 주고받으면서 협력한다. 객체지향의 핵심 역할과 책임 협력은 객체지향의 핵심이다. 객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력이라고 한다. 그리고 객체가 협력에 참여하기 위해 수행하는 로직을 책임이라고 부른다. 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성한다. 협력 두 객체의 협력에 사용되는 유일한 수단은 메시지 전송이다. 다른 객체에게 도움을 요청하기 위해 메시지를 전송하고, 메시지..

OOP 2024.01.28

[LeetCode] 1657. Determine if Two Strings Are Close

🔈 문제 Two strings are considered close if you can attain one from the other using the following operations: Operation 1: Swap any two existing characters.For example, abcde -> aecdb Operation 2: Transform every occurrence of one existing character into another existing character, and do the same with the other character. For example, aacabb -> bbcbaa (all a's turn into b's, and all b's turn into ..

[DB] Flyway

Flyway Flyway란 오픈소스 데이터베이스 마이그레이션 툴이다. 다시말해 데이터베이스의 DDL 이력을 쌓아서 관리하는 툴이다. 이를 통해 데이터베이스 형상관리 및 마이그레이션을 할 수 있다. 사용 이유 개발을 진행하다보면 엔티티의 구조가 변경되고 이로 인해 데이터베이스의 스키마도 변경되는 일이 발생한다. 소프트웨어 소스 코드는 Git과 같은 형상관리 툴을 사용하여 버전관리를 진행했다면, 데이터베이스는 그러지 못했다. 일일히 스키마 수정을 위한 DDL을 각 환경별로 모두 실행해주어야 했다. 로컬 개발 환경이나 개발 서버에서는 하이버네이트 설정 중 ddl-auto 에서 create나 create-drop, update 옵션을 사용하여 엔티티 구조를 맞춰 실행이 가능하나, 운영 환경에서는 해당 설정이 불..

[우테코] 프리코스, 최종 코테 및 최종 합격 후기 (백엔드)

우테코 6기에 지원하여 최종합격하고 난 후 작성하는 글이다. (이녀석 프리코스 진행할 때는 회고록도 안쓰더니) (하지만 프리코스 때에는 미션하기도 벅찼는걸) 전체적인 과정을 쭈욱 돌아볼 계획이다. 자소서 5기때와 자소서 문항이 변경되었지만 묻고자하는 본질은 비슷했다. 스터디를 하면서 피드백을 주고 받았고, 찐최최최최종본을 연락하고 지내는 국어선생님께 부탁하여 마지막 피드백을 받았다. 최종 제출 마감일이 10월 16일 월요일 10시까지였는데, 일요일 새벽까지 술마시다가 술기운을 빌려 새벽 3시 9분에 제출하였다. 🍻 1. 효과적인 학습 방식과 경험 (1000자 이내) 프로그래밍 학습을 하고 장기간 개발자로 살아가기 위해, 본인만의 효과적인 학습 방식을 찾는 것은 매우 중요합니다. 프로그래밍이 아니더라도 지..

[리뷰] 머신러닝 엔지니어링 인 액션

한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다. 머신러닝 엔지니어링 인 액션 도서는 크게 세 부분으로 구성되어있다. 그리고 각 부는 머신러닝 프로젝트에 적용되는 마일스톤을 다룬다. '무엇을 해결하려고 하는가?'에 대한 초기 범위 설정 단계부터 '이 솔루션을 앞으로 몇 년간 어떻게 유지 관리할 것인가?'에 대한 마지막 단계까지, 프로젝트를 진행하면서 시기별로 고려하게 되는 주제들에 대해 논리적으로 동일한 순서로 살펴본다. 주로 머신러닝 프로젝트의 관리 측면에 대해 팀장, 매니저, 프로젝트 리더의 관점으로 다룬다. 솔루션 구축에 따르는 함정에 빠지지 않도록 범위 설정, 실험, 프로토타이핑에 대한 청사진을 제시하고, 포괄적인 피드백을 전달한다. 머신러닝 프로젝트의 개발 프로세스를 다룬다. 머신러닝 ..

Blah blah 2023.12.24

[디자인 패턴] 디자인 패턴 (feat: 스프링)

디자인 패턴 Design Pattern 디자인 패턴이란 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 일반적인 해결책이다. 디자인 패턴의 분류 GoF(Gang of Four)의 디자인 패턴은 크게 생성 패턴, 구조 패턴, 행위 패턴으로 분류된다. 생성 패턴 (Creational Pattern) 생성 패턴의 목적 클래스의 캡슐화를 통해 코드의 유연성과 재사용 가능성을 향상시키는 패턴 생성 패턴의 예 추상 팩토리 (Abstract Factory) 빌더 (Builder) 팩토리 메서드 (Factory Method) 프로토타입 (Prototype) 싱글턴 (Singleton) 구조 패턴 (Structural Pattern) 구조 패턴의 목적 클래스와 객체를 조합하여 더 큰 구조를 만드는 패턴 인터페이스..

[오브젝트] 5장 책임 할당하기

이번 장에서는 이전 장과는 달리 데이터에 초점을 맞추는 것이 아닌 객체에 책임을 할당하는데에 초점을 맞추는 방식을 살펴본다. 1. 책임 주도 설계를 향해 데이터 중심의 설계에서 책임 중심의 설계로 전환하기 위해서는 다음의 두 가지 원칙을 따라야 한다. 데이터보다 행동을 먼저 결정하라 협력이라는 문맥 안에서 책임을 결정하라 책임 주도 설계 책임 주도 설계의 흐름은 아래와 같다. 시스템이 사용자에게 제공하는 기능인 시스템 책임을 파악한다. 시스템 책임을 더 작은 책임으로 분할한다. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다. 해당 객체 또는 역할에게 책임을 할당함으로써..

OOP 2023.12.09

[오브젝트] 4장 설계 품질과 트레이드오프

객체지향 설계의 핵심은 역할, 책임, 협력이다. 올바른 객체에게 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다. 훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조를 만드는 것이다. 적절한 비용 안에서 쉽게 변경할 수 있는 설계는 응집도가 높고 서로 느슨하게 결합돼 있는 요소로 구성된다. 이를 달성하기 위한 중요한 원칙은 객체의 상태가 아니라 객체의 행동, 더 나아가 책임에 초점을 맞추는 것이다. 객체를 단순한 데이터의 집합으로 바라보는 시각은 객체의 내부 구현을 퍼블릭 인터페이스에 노출시키는 결과를 낳기 때문에 결과적으로 설계가 변경에 취약해진다. 이번 장에서는 영화 예매 시스템을 책임이 아닌 상태를 표현하는 데이터 중심의 설계를 먼저 살펴보고 객체지향적으로 ..

OOP 2023.12.02

[DB] SQL Injection

SQL Injection SQL 인젝션은 악의적인 사용자가 보안상의 취약점을 이용하여, 조작된 쿼리문을 DB에 그대로 전달하여 비정상적 명령을 실행시키는 공격 기법이다. 공격 목적 정보 유출 저장된 데이터 유출 및 조작 원격 코드 실행 일부 데이터베이스의 경우 확장 프로시저를 이용하여 원격으로 시스템 명령의 실행 가능 시스템 명령의 실행은 원격 자원 접근 및 데이터 유출, 삭제 가능 인증 우회 공격의 대표적인 경우는 로그인 폼에서 발생 이때 상위 권한을 가진 사용자의 권한으로 인증 절차를 우회하여 로그인 발생 조건 사용자 입력값의 신뢰성 부족 사용자로부터 입력 받은 값(폼 데이터, URL 파라미터)을 적절히 검증 또는 이스케이프하지 않은 경우 발생 동적 SQL 쿼리 생성 동적으로 SQL 쿼리를 생성하고 ..