728x90

개발/ETC 68

Git, SVN 차이

1. 분산 vs 중앙 집중식: git은 분산 버전 관리 시스템이며, 모든 개발자가 로컬 저장소를 가지고 독립적으로 작업할 수 있고, 변경 사항을 원격 저장소와 동기화할 수 있다. 반면에 svn은 중앙 집중식 버전 관리 시스템으로, 모든 개발자들이 중앙 서버에 접근하여 작업하고 변경 사항을 반영한다. 2. 브랜치와 병합: git은 브랜치와 병합 기능이 강력하게 내장되어 있어, 다양한 브랜치를 만들고 병합을 수행하여 동시에 다양한 작업을 처리할 수 있다. svn도 브랜치와 병합을 지원하지만, git에 비해 제한적이고 번거로운 경우가 있다. 3. 로컬 저장소 vs 중앙 서버: git은 로컬 저장소를 가지고 작업할 수 있어, 오프라인 상태에서도 커밋, 브랜치 생성, 히스토리 조회 등이 가능하다. 반면에 svn은..

개발/ETC 2023.04.24

로그인 세션, 토큰 장단점

로그인 세션 방식과 토큰 방식은 모두 사용자 인증과 권한 부여에 사용되는 인증 방법 로그인 세션 방식: 장점: 보안성: 로그인 세션 방식은 세션 ID를 서버 측에서 관리하기 때문에 보안성이 높다. 사용자 인증 정보가 브라우저에 저장되지 않으므로, 쿠키 탈취 등의 보안 위협에 취약하지 않다. 적용 범위: 로그인 세션 방식은 모든 웹 애플리케이션에서 사용할 수 있다. 단점: 성능: 로그인 세션 방식은 서버에서 세션 정보를 유지하기 때문에 서버 부하가 증가할 수 있다. 또한, 매 요청마다 세션 ID를 서버에서 검증해야 하므로 네트워크 대역폭도 증가한다. 확장성: 로그인 세션 방식은 클러스터링 및 로드 밸런싱과 같은 서버 확장성 문제가 있다. 토큰 방식: 장점: 보안성: 토큰 방식은 토큰을 브라우저에 저장하고,..

개발/ETC 2023.04.22

Inner Join, Outer Join 차이

inner join, outer join은 둘 다 관계형 DB에서 사용되는 sql 쿼리의 join 연산자인 것이 공통점. 차이점은 1. Inner Join은 두 개의 테이블에서 일치하는 행들만 보여줌. ( 교집합 ) 예를 들면, 고객 테이블과 주문 테이블이 있을 때, Inner Join을 사용하면 고객과 주문 테이블에서 동시에 고객 정보와 주문 정보가 있는 행들만 보여준다. 2. Outer Join은 두 개의 테이블에서 일치하지 않는 행들도 보여줌. ( 합집합 ) Outer Join은 Left, Rigth, Full 세 가지로 나뉜다. - Left Outer Join: 왼쪽 테이블의 모든 행들과 오른쪽 테이블에서 일치하는 행들을 조합하여 보여줌. 오른쪽 테이블에 일치하는 행이 없는 경우 Null로 처리함..

개발/ETC 2023.04.20

When using COPY with more than one source file, the destination must be a directory and end with a / 해결

Spring boot 프로젝트를 AWS와 Docker Github Action을 사용해서 배포과정 중 만난 에러 그냥 배포를 하게 되면 plain.jar가 생성되는데, 여기엔 우리가 추가한 라이브러리들이 다 빠져있고, 우리가 작성한 코드만 들어있다. 그러다보니 에러가 발생하므로 아래 명령어로 plain.jar 생성을 차단하자 build.gradle에 jar { enabled = false } 추가해준다. -참고 https://dev-j.tistory.com/22

개발/ETC 2023.03.10

Error: Gradle script '/home/runner/work/~' is not executable. 해결

spring boot 프로젝트를 github action을 이용해서 CI는 중 에러가 발생했다. 찾아보니 해결책이 3개 였는데, 3번째는 제외했다. script에서 권한을 주는 방법. - name: Run chmod to make gradlew executable run: chmod +x ./gradlew git 자체에 권한을 주는 방법(터미널로 프로젝트 경로에서 명령어 입력) git update-index --chmod=+x gradlew - 참고 https://spacetech.dk/error-gradle-script-home-runner-work-gradlew-is-not-executable.html

개발/ETC 2023.03.09

refusing to allow a Personal Access Token to create or update workflow 해결

vs코드에서 커밋, 푸쉬 기능을 사용하는데, 이런 에러가 발생했다. github에서 발급받은 Access Token이 권한이 부족해서 발생한 에러다. 이를 해결하기 위해서는 깃헙 계정의 Setting > Developer settings > Personal acess tokens > Tokens (classic) 에서 발급 받은 토큰을 선택해서 workfolw에 체크해주고 update token 클릭하면 이제 잘 된다.

개발/ETC 2023.03.08

프로세스와 스레드

1. 개념 - 프로세스는 컴퓨터에서 실행되고 있는 프로그램. - 스레드는 프로세스 내 작업의 흐름. - 프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 발생. - 이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행. 2. 프로세스와 컴파일 과정 - 프로세스는 프로그램으로부터 인스턴스화 된 것. - 프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일이 되는 것을 의미.(C언어 기반의 프로그램을 말함) 전처리: 소스 코드의 주석을 제거하고 #include 등 헤더 파일을 병합하여 매크로를 치환. 컴파일러: 오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환. 어셈블러: 어셈블리어는 목적 코드로 변환. 이때 확장자는 운영체제마다 다..

개발/ETC 2023.01.29

디자인 패턴 (4)

1. MVC 패턴 - MVC 패턴은 모델, 뷰, 컨트롤러로 이루어진 디자인 패턴 - 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있음 - 재사용성과 확장성이 용이하다는 장점 - 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해지는 단점 - 모델 모델은 애플리케이션의 데이터인 DB, 상수, 변수 등을 말함 - 뷰 1. 뷰는 input, checkbox, textarea 등 사용자 인터페이스 요소를 말함 2. 변경이 일어나면 컨트롤러에 이를 전달 - 컨트롤러 1. 컨트롤러는 하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할 2. 이벤트 등 메인 로직 담당 3. 모델과 뷰의 생명주기 관리 4. 모델이나 뷰의 변경 통지를 받으면 이를 해석..

개발/ETC 2023.01.06

디자인 패턴 (3)

1. 프록시 패턴과 프록시 서버 - 프록시 패턴 프록시 패턴은 대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객채 앞단의 인터페이스 역할을 하는 디자인 패턴 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용 이는 프록시 객체로 쓰이기도 하지만 프록시 서버로도 활용 * 프록시 서버에서의 캐싱: 캐시 안에 정보를 담아두고, 캐시 안에 있는 정보를 요구하는 요청에 대해 다시 저 멀리 있는 원격 서버에 요청하지 않고 캐시 안에 있는 데이터를 활용하는 것을 말한다. -> 불필요하게 외부와 연결하지 않기 때문에 트래픽을 줄일 수 있다는 장점이 있다. - 프록시 서버 프록시 서버는 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 ..

개발/ETC 2023.01.04

디자인 패턴 (2)

1. 전략 패턴 - 전략 패턴은 정책 패턴이라고도 한다. - 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 캡슐화한 알고리즘을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만든느 패턴 - Java의 전략 패턴 예시 public class HelloWord { public static void main(String[] args) { ShoppingCart cart = new ShoppingCart(); Item A = new Item("item1", 100); Item B = new Item("item2", 200); cart.addItem(A); cart.addItem(B); // pay by A Card cart.pay(new ACard("test@email.com", "hi..

개발/ETC 2023.01.03
728x90