게시글
질문&답변
2023.02.19
시간복잡도와 시간제한 질문입니다.
시간복잡도가 O(n^2)인 알고리즘이 1만번의 데이터를 처리할 때, 일반적으로 1초 이내에 처리할 수 있는 경우가 많습니다.그러나 이는 매우 상대적인 기준이며, 알고리즘의 구현 방법, 사용되는 컴퓨터의 성능, 입력 데이터의 특성 등에 따라 다를 수 있습니다.따라서, 알고리즘의 성능을 측정하고 시간제한을 예측하려면 해당 알고리즘을 실제로 실행해보는 것이 가장 확실한 방법입니다. 또한, 알고리즘의 성능을 높이기 위해 최적화 기법 등을 적용할 수도 있습니다.
- 0
- 2
- 415
질문&답변
2023.02.19
request
밑줄이 쳐지는 이유는 @RequestBody 어노테이션으로 인해 스프링이 해당 매개변수가 HTTP 요청의 본문(body)에 있는 JSON 또는 XML 데이터로부터 값을 바인딩해야 한다는 것을 나타내기 위해서입니다.따라서 해당 매개변수를 바꾸면 스프링이 HTTP 요청 본문으로부터 데이터를 바인딩하지 못하게 되므로 밑줄이 쳐지는 것입니다. 만약 매개변수 이름을 변경하고 싶다면, @JsonProperty 어노테이션을 사용하여 요청 본문의 필드 이름과 매핑할 수 있습니다. 예를 들어, UserUpdateRequest 클래스에서 name 필드를 userName으로 변경하려면 다음과 같이 @JsonProperty 어노테이션을 사용할 수 있습니다: codepublic class UserUpdateRequest { @JsonProperty("userName") private String name; // ... } 이제 userName 필드 이름을 사용하여 HTTP 요청 본문에서 데이터를 바인딩할 수 있습니다.
- 1
- 2
- 473
질문&답변
2023.02.18
Docker 2 - API 패키징 "/" 슬러시 생략가능 여부 질문
Dockerfile에서 마지막 슬래시 "/"는 생략 가능합니다. 이는 Dockerfile에서 명령어가 다음 줄로 이어질 때, 명령어와 구분하기 위해 사용하는 구분자로, 마지막 줄에는 사용하지 않아도 됩니다. 따라서, 아래와 같이 작성해도 동일하게 동작합니다.WORKDIR /myfolder COPY ./package.json /myfolder COPY ./yarn.lock /myfolder 결과적으로, 슬래시의 유무는 Dockerfile의 문법적인 요구사항이 아니며, 작성 스타일에 따라 다르게 작성할 수 있습니다.
- 0
- 1
- 272
질문&답변
2023.02.18
mysql 비밀번호 재설정
에러 메시지가 'Access denied for user 'root'@'localhost' (using password: YES)' 이라면 입력한 비밀번호가 틀렸다는 의미입니다. 아마도 비밀번호 초기화 과정에서 무언가 잘못 입력하거나 저장하지 않아서 발생한 문제일 수도 있습니다.비밀번호를 초기화할 때 다음과 같은 절차를 따르셨는지 확인해보세요.MySQL 서버를 정지합니다.다음 명령을 실행하여 MySQL을 권한 없이 실행합니다.sudo mysqld_safe --skip-grant-tables 다른 터미널 창을 열고 MySQL을 실행합니다.mysql -u root 다음 명령을 실행하여 MySQL에서 비밀번호를 재설정합니다. UPDATE mysql.user SET authentication_string=password('새로운비밀번호') WHERE user='root' AND Host = 'localhost'; FLUSH PRIVILEGES; MySQL 서버를 정상적으로 시작합니다.sudo systemctl start mysql 다시 로그인하여 새로운 비밀번호가 잘 적용되었는지 확인합니다. mysql -u root -p
- 1
- 2
- 13K
질문&답변
2023.02.18
싱글톤패턴에서 질문
init() 메소드는 인스턴스 생성 시 초기화를 담당하는 메소드로 보통 생성자(constructor)에서 수행합니다. 하지만, 싱글톤 패턴에서는 생성자를 private으로 선언하므로 초기화 코드를 다른 방식으로 처리해야 합니다.그래서 instance 프로퍼티의 getter 메소드에서 초기화 코드를 호출하는 것입니다. 만약 init()을 호출하지 않고, return s_instance;만 작성한다면, s_instance가 아직 초기화되지 않았을 때 null을 반환하기 때문에 오류가 발생할 수 있습니다.따라서 init() 메소드를 호출하여 s_instance를 초기화하고, 초기화된 s_instance를 반환하도록 작성하는 것이 좋습니다. 이렇게 하면 s_instance를 호출할 때마다 초기화 코드를 작성할 필요 없이, 항상 초기화된 인스턴스를 가져올 수 있습니다.
- 0
- 1
- 469
질문&답변
2023.02.18
싱글톤 질문 드립니다.
싱글톤은 하나의 객체 인스턴스만 생성하여 여러 곳에서 공유하여 사용하는 디자인 패턴입니다. 스프링에서 싱글톤으로 등록된 빈은 컨테이너에서 생성된 인스턴스를 애플리케이션 전체에서 공유하여 사용하게 됩니다.예를 들어, 데이터베이스 연결, 파일 시스템 접근, 네트워크 연결 등과 같이 자원을 효율적으로 관리하고자 할 때 싱글톤 패턴을 사용할 수 있습니다. 이를 통해, 인스턴스를 여러 개 생성하지 않아 자원 낭비를 방지하고, 인스턴스 간의 데이터 불일치 문제도 해결할 수 있습니다. 또한, 스프링에서는 싱글톤 패턴을 이용하여 서비스 빈이나 DAO 빈 등과 같은 객체를 등록하여 공유하면, 메모리 사용량도 줄일 수 있습니다.하지만, 스프링에서 모든 빈을 싱글톤으로 등록하는 것은 적절하지 않을 수도 있습니다. 예를 들어, 상태를 가지고 있는 빈은 여러 클라이언트에서 공유되면 안되므로, 싱글톤으로 등록하지 않는 것이 좋습니다. 이런 경우에는, @Scope 애노테이션 등을 이용하여 빈의 스코프를 설정하여 인스턴스의 생성과 소멸을 관리할 수 있습니다.
- 1
- 1
- 450
질문&답변
2023.02.18
하드 링크, 심볼릭 링크
안녕하세요! 답변드리겠습니다.하드 링크는 파일의 내용 자체를 복사하는 것이 아니라, 파일 시스템에서 해당 파일의 inode 번호를 다른 이름으로 만들어주는 것입니다. 즉, 하드 링크를 사용하면 기존 파일과 같은 내용을 가진 새로운 파일이 생성되는 것이 아니라, 같은 파일의 inode 번호를 공유하는 새로운 파일이 생성되는 것입니다.cp 명령어는 파일을 복사하는 명령어이기 때문에, 기존 파일과 같은 내용을 가진 새로운 파일을 생성하는 것입니다. 하드 링크는 같은 파일을 다른 이름으로 참조하는 것이기 때문에, 파일의 내용을 복사하지 않고도 새로운 파일을 생성할 수 있어서 디스크 공간을 절약할 수 있습니다. 또한, 기존 파일의 수정이 새로운 파일에도 반영되는 장점이 있습니다.심볼릭 링크는 원본 파일이나 폴더를 가리키는 링크이기 때문에, 해당 파일이나 폴더에 대한 권한을 따라갑니다. 예를 들어, 원본 파일이나 폴더의 소유자나 그룹 등의 권한이 변경된다면, 심볼릭 링크도 같이 변경됩니다.하드 링크는 같은 파일의 inode 번호를 공유하기 때문에, 크기가 10바이트인 파일을 하드 링크로 복사하게 되면 사이즈는 10바이트가 됩니다. 즉, 디스크 공간을 추가로 차지하지 않습니다.심볼릭 링크의 경우에도, 실제로는 원본 파일을 가리키기 때문에 링크 자체의 크기는 매우 작습니다. 링크 파일의 사이즈는 원본 파일의 경로를 저장하는 것뿐이기 때문에, 크기가 매우 작습니다. 따라서, 크기가 10바이트인 원본 파일을 10바이트로 표현하는 심볼릭 링크 파일이 생성됩니다.
- 1
- 2
- 503
질문&답변
2023.02.18
스프링 MVC2 타임리프 체크박스 관련 질문
체크박스에서 사용자가 선택을 하지 않은 경우, HTTP 요청에서 해당 파라미터가 전달되지 않습니다. 이 경우, Spring MVC는 해당 파라미터의 값을 null로 설정합니다. 따라서, 컨트롤러에서 해당 파라미터를 Boolean 타입으로 받을 경우, null 값을 처리해야 합니다. 이러한 null 처리를 방지하기 위해, 기본 값을 false로 설정하는 것은 하나의 방법입니다.하지만, Thymeleaf에서는 th:field 또는 th:checked 속성을 사용하면, 체크박스가 선택되지 않은 경우에도 파라미터가 전달되도록 설정할 수 있습니다. 이를 통해, 컨트롤러에서 null 처리를 하지 않고도 원하는 값으로 초기화할 수 있습니다. 또한, th:field 또는 th:checked 속성을 사용하면, 체크박스의 값이 Boolean이 아닌 다른 타입으로 변환되는 경우에도 자동으로 처리할 수 있습니다. 따라서, Thymeleaf에서는 th:field 또는 th:checked 속성을 사용하는 것이 좀 더 편리하고 안정적인 방법입니다.
- 0
- 1
- 287
질문&답변
2023.02.18
네스팅 방식으로 goRouter Go를 사용할때, 앱바타이틀이 정상적으로 표시되지 않는 문제
안녕하세요! GoRouter를 사용하면서 발생한 앱바 타이틀이 유지되지 않는 문제에 대해 답변드리겠습니다.GoRouter를 사용하면 router.location을 이용해 현재 경로를 나타낼 수 있지만, 이 경로는 현재 보여지고 있는 화면의 경로와는 무관하게 GoRouter에서 가지고 있는 내부 경로 정보입니다. 그래서 이 값을 그대로 앱바 타이틀로 사용하면 화면 전환이 일어날 때마다 경로 정보가 바뀌는 문제가 발생합니다.앱바 타이틀에 현재 화면의 이름을 나타내기 위해서는, 각각의 스크린에서 SingleChildGoRouter 위젯을 이용해 GoRouter에 등록된 현재 경로 정보를 이용해 타이틀을 동적으로 변경해주어야 합니다. 이렇게 하면 화면이 전환될 때마다 현재 화면에 맞는 타이틀을 보여줄 수 있습니다.다음은 수정된 DefaultLayout 클래스의 예시입니다.class DefaultLayout extends StatelessWidget { final Widget body; const DefaultLayout({ Key? key, required this.body, }) : super(key: key); @override Widget build(BuildContext context) { final router = GoRouter.of(context); return Scaffold( appBar: AppBar( title: SingleChildGoRouter( router: router, builder: (BuildContext context, GoRouterState state) { // 현재 경로에서 마지막 경로를 가져와 타이틀로 사용 final currentLocation = state.currentLocation; final title = currentLocation.segments.last; return Text(title); }, ), ), body: Padding( padding: const EdgeInsets.symmetric( horizontal: 16.0, ), child: body, ), ); }} SingleChildGoRouter를 이용해 현재 경로의 마지막 경로를 가져와 타이틀로 사용하도록 구현했습니다. 이렇게 구현하면 화면 전환이 일어날 때마다 앱바 타이틀이 적절하게 변경됩니다.참고로, SingleChildGoRouter는 GoRouter 내부에서 현재 경로 정보를 이용해 동적으로 위젯 트리를 구성할 때 사용하는 위젯으로, 현재 경로 정보를 이용해 앱바 타이틀 등을 동적으로 변경하는 데 매우 유용합니다.
- 0
- 2
- 385
질문&답변
2023.02.18
장고(django) self.object 속성 관련
self.object는 SingleObjectMixin에서 제공하는 기본 메서드들을 통해 설정됩니다.SingleObjectMixin은 단일 객체를 조회하고 화면에 렌더링하기 위한 공통된 기능을 제공하는 믹스인 클래스입니다. SingleObjectMixin을 상속받은 뷰에서는 단일 객체를 조회하고, 이를 get_object() 메서드를 통해 반환합니다. 그리고 이렇게 반환된 객체는 self.object에 저장됩니다.따라서 get_context_data() 메서드에서 self.object 속성에 접근할 수 있는 것은, 이전에 get_object() 메서드를 통해 조회한 객체를 저장하고 있는 self.object 속성이 자동으로 설정되어 있기 때문입니다. get_object() 메서드에서 단일 객체를 조회한 후 self.object에 저장되며, 이후 get_context_data()에서 self.object 속성에 접근하면 조회한 단일 객체를 가져올 수 있습니다.
- 0
- 1
- 617