위대한 수업 (그레이트 마인즈)
짧은 생각 해당 프로젝트를 진행하며 느꼈던 지극히 개인적인 생각들을 복기한다. 2021년 7월 12일 회의를 진행했다. 고객의 요구사항은 넷플릭스와 비슷한 컨셉의 교육 콘텐츠 웹페이지 개발이었다. 팀은 개발자 5명, 퍼블리셔 2명, 기획자 1명, 개발 리드 1명, 프로젝트 매니저 1명으로 총 10명이 구성되었는데, 이전 프로젝트들보다 개발자 비중이 높은 편이었다. 필자는 사용자들의 메시지 관리, 이벤트별 메일, 문자발송, 앱 토큰 API 구현, 메인 카테고리 헤더 화면 등을 맡아 개발을 진행했다. 화면구성은 레이아웃 프레임워크인 SiteMesh를 사용해 유지보수가 편리하도록 했고, AWS SES SDK를 활용해 메시지 관리 시 데이터 통계를 한눈에 확인할 수 있도록 시인성을 높이는 한편, 시크릿키 관리로 보안성도 높였다. 데이터베이스는 PostgreSQL을, JDK는 가장 보편적인 JDK8을 사용했다. 해야 할 일들을 항상 정리하고 그대로 진행하리라 다짐하지만, 지키긴 쉽지...
메모리 관리
개념 관리 기법 메인 메모리는 운영체제를 위한 영역과 사용자 프로그램을 위한 영역으로 나뉜다. 다중 프로그래밍 시스템에서는 운영체제가 이 사용자 영역을 동적으로 세분화해, 여러 프로세스가 동시에 상주할 수 있도록 관리한다. 반입 정책 반입 정책은 메인 메모리에 적재할 다음 프로세스의 시점을 결정하는 방법이다. 요구 반입 기법은 운영체제나 시스템 프로그램, 사용자 프로그램의 참조 요구에 따라 메인 메모리에 적재하는 방식으로 오랫동안 쓰여왔다. 예상 반입 기법은 시스템의 요구를 미리 예측해 메모리에 선제적으로 적재하는 방식으로, 비교적 최근에 쓰이기 시작했다. 요청받은 페이지 외에 다른 페이지도 함께 들여오며, 탐색 시간과 회전 지연 시간을 갖는 보조기억장치의 특성을 고려한 정책이다. 배치 정책 배치 정책은 디스크에서 반입한 프로세스를 메인 메모리의 어느 위치에 저장할지 결정하는 방법으로, 최초 적합, 최적 적합, 최악 적합 등이 있다. 대치 정책 대치 정책은 재배치 기법의 하나로...
병행 프로세스
병행 프로세스 병행 프로세스는 독립적으로 작업을 수행하기도 하고, 다른 프로세스와 협력해 특정 기능을 수행하기도 한다. 이 협력 과정에서는 프로세스 간 통신이 필요하다. 비동기적 병행 프로세스 여러 프로세스가 통신할 때 서로 동기화되어야 하는 프로세스를 비동기적 병행 프로세스라 부른다. 상호작용 프로세스들이 상호작용하는 이유는 제한된 자원을 공유하기 위해서다. 이렇게 상호작용하는 프로세스는 정해진 순서에 맞게 실행되도록 동기화되어야 한다. 병행성 병행성은 다수의 프로세서를 이용해 작업을 수행하는 방식으로, 다중 처리 시스템, 분산 처리 환경, 다중 프로그래밍 운영체제에서 특히 중요하다. 시스템의 신뢰도를 높이고 처리 속도를 개선해 전체 처리 능력을 끌어올리는 데 핵심적인 역할을 한다. 다중 처리 시스템에서는 각 프로세서가 갖는 오버헤드를 줄이면서 프로세서의 유효성을 높이는 것이 목표이며, 이를 위해 여러 개의 명령어를 세분화해 동시에 처리할 수 있도록 프로세서들을 연결하고 그 ...
JDBC (Java Database Connectivity)
JDBC, 넌 누군데? JDBC는 자바 언어로 다양한 종류의 관계형 데이터베이스에 접속하고 명령문을 수행해 처리할 때 사용하는 표준 API다. 자바 표준 에디션이 지원하는 기술로, 접속하려는 DBMS 서버에 따라 별도의 드라이버가 필요하다. 간단한 구성 JDBC는 네 단계를 거쳐 동작한다. JDBC Interface: Java SE가 제공하는 java.sql 패키지다. JDBC Driver: java.sql 인터페이스들을 상속해 메소드의 몸체(body)를 구현한 클래스들이다. JDBC 프로그램을 작성하려면 먼저 이 드라이버가 준비되어 있어야 한다. JDBC Driver loading: Class.forName("oracle.jdbc.driver.OracleDriver");처럼 드라이버 클래스를 로딩한다. DBMS Server 접근: 드라이버 준비가 끝나면 java.sql 패키지의 DriverManager 클래스가 제공하는 getConnection()으로 DB...
의존성 주입 (DI)
Dependency Inject 개발자가 객체간 의존성을 직접 호출하는 대신 스프링 컨테이너에서 생성하여 넣어주는 방식 인터페이스를 사이에 두어 클래스 레벨에서 의존관계가 고정되지 않고, 런타임 시 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮춘다. 의존성 주입에 사용되는 Annotation 에는 @Autowired, @Inject, @Resource가 있다. 12345678910111213public class Controller { private Service service = new Service(); // 직접 호출 //만약, Service 의 객체를 Service2() 로 교체해야 한다면, //Service 를 의존하는 모든 클래스를 수정해주어야 한다. //해당 문제를 해결하기 위해 DI 를 사용한다. void test() { service.test(); } ...





